суббота, 19 ноября 2011 г.

Mysql и несколько экземпляров на одном сервере.

Потребности в такой установке могут быть весьма различны, а вот этапы настройки вполне одинаковые.

Будем использовать mysqld_multi - программа для управления множеством серверов MySQL.

Для понимания процесса читаем доки.
http://dev.mysql.com/doc/refman/5.0/en/mysqld-multi.html
http://mysql.ru/docs/man/mysqld_multi.html

Создаем каталог для multi mysql, к примеру /var/lib/mysql_multi/
и в нем подкаталоги 01,02...nn
Выставим нужные права на них и собственника.
chmod 755 /var/lib/mysql_multi -R
chown mysql:mysql /var/lib/mysql_multi -R

Создадим в my.cnf нужные разделы (см. ссылки выше) со своими путями к файлам
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass

к примеру для экземпляра #2

[mysqld2]
socket = /var/run/mysqld/mysqld2.sock
port = 3312
pid-file = /var/run/mysqld/mysqld2.pid
datadir = /var/lib/mysql_multi/02
language = /usr/share/mysql/english
user = mysql

** Перед запуском сервера mysql необходимо создать структуру в целевом каталоге:

mysql_install_db --user=mysql --datadir=/var/lib/mysql_multi/02

** Запуск нужного экземпляра сервера:

mysqld_multi start 2

** проверитм подключение:

mysql --socket=/var/run/mysqld/mysqld2.sock
или
mysql --host=127.0.0.1 --port=3312

НЕ ИСПОЛЬЗУЙТЕ "localhost" вместо "127.0.0.1"! Иначе вместо подключения к нужному порту будет задействован сокет по умолчанию. А это будет совсем не тот экземпляр сервера, который вы хотели.

** установим пароль рута:

mysqladmin --socket=/var/run/mysqld/mysqld2.sock -u root password 'new-password'
или
mysqladmin --host=127.0.0.1 --port=3312 -u root password 'new-password'

Так же создадим пользователя mulit_admin и права для выключения сервера mysql для всех экземпляров сервера:

GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';

к примеру так:

echo "GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';" | mysql --host=127.0.0.1 --port=3312 -u root -p'password'

ну и соответственно в разделе my.cnf [mysqld_multi] надо внести те же значения
user = multi_admin
password = multipass

Собственно, пока все. Т.е. теперь запустить экземпляры сервера mysql можно командой

mysqld_multi start 2,4,5
остановить аналогично
mysqld_multi stop 2,4,5

2 комментария:

  1. chkconfig --add mysqld_multi
    пишет не такого файл или процесса. в /etc/rc.d/init.d там действительно нет этого файла.
    как то победить это можно?

    ОтветитьУдалить
  2. Этот файл в Debian лежит в /usr/bin/mysqld_multi
    В init.d его нет, это что-то вроде служебной программы mysql

    ОтветитьУдалить