4.7.3 Mysqld_multi, программа для управления множеством серверов MySQL
Программа mysqld_multi предназначена для управления несколькими процессами
mysqld, работающих на различных сокетах Unix и портах TCP/IP.
Программа будет искать группу(группы) [mysqld#] в `my.cnf' (или
заданных при помощи --config-file=... файлах), где # - любое
положительное число, начиная с 1. Мы говорим про этот номер далее как про номер
группы опций, или GNR. Номера групп различают группы опций одну от другой и
используются как аргумент при запуске mysqld_multi чтобы указать, какие сервера
вы хотите запустить, остановить или получить статус об. Эти группы должны быть
такими же, как и обычная группа [mysqld] (например содержать опции для
mysqld; см. в руководстве более подробную информацию), но с такими
портом, сокетом и т.д., которые требуются для каждого отдельного процесса
mysqld.
mysqld_multi запускается в таком синтаксисе:
Использование: mysqld_multi [OPTIONS] {start|stop|report} [GNR,GNR,GNR...]
или mysqld_multi [OPTIONS] {start|stop|report} [GNR-GNR,GNR,GNR-GNR,...]
GNR здесь означает номер группы. Можно запускать, останавливать или создавать отчеты о любом GNR, или о нескольких из них одновременно. Получить пример о том, как бы вы могли настроить файл опций, можно так:
shell> mysqld_multi --example
В качестве разделителей в списке GNR применяются запятые, комбинации создаются при помощи тире. Последнее означает, что будут задействованы все номера GNR из диапазона GNR1-GNR2. Если не задан аргумент GNR, то все группы будут либо запущены, либо остановлены, либо будет выведен отчет об этих группах. Обратите внимание, что в списке GNR не должно быть никаких пропусков (пробелов, символов табуляции или пустых строк). Любые данные после пропуска будут игнорироваться.
mysqld_multi поддерживает следующие опции:
--config-file=...-
Альтернативный файл конфигурации (
config file). Примечание: данный файл не влияет на собственные опции этой программы (группа[mysqld_multi]), а только на группы[mysqld#]. Без этой опции поиск всех данных будет осуществляться только в обычном файле `my.cnf'. --example- Представляет пример файла конфигурации.
--help- Выводит справочную информацию и завершает работу.
--log=...- Файл журнала. Имя файла журнала и полный путь к нему. Примечание: если файл существует, записи будут добавляться в конец файла.
--mysqladmin=...-
Исполняемый файл
mysqladmin, используемый для завершения работы сервера. --mysqld=...-
Исполняемый файл
mysqld, который будет использоваться. Обратите внимание: в этой опции можно также указыватьsafe_mysqld. Опции передаютсяmysqld. Необходимо только удостовериться, что в переменной окружения PATH имеетсяmysqldили что установленsafe_mysqld. --no-log-
Вывод в
stdoutвместо журнала. По умолчанию журналы включены. --password=...-
Пароль пользователя для доступа к
mysqladmin. --tcp-ip- Подсоединение к серверу(ам) MySQL по TCP/IP вместо Unix-сокетов. Данная опция влияет на завершение работы сервера и создание отчетов. Если файл сокета отсутствует, сервер будет работать, но к нему можно будет обращаться только через порт TCP/IP. По умолчанию соединение осуществляется через сокет Unix.
--user=...-
Имя пользователя MySQL для
mysqladmin. --version- Вывод номера версии и завершение работы.
Некоторые примечания относительно mysqld_multi:
-
Удостоверьтесь, что пользователь MySQL, останавливающий
mysqld(например, при помощиmysqladmin), имеет один пароль и имя пользователя для всех директорий данных, к которым производится доступ (имеется в виду - к базе данныхmysql). Убедитесь также, что пользователь имеет привилегиюShutdown_priv! Если имеется несколько директорий с данными и несколько различных баз данныхmysqlс различными паролями для пользователяrootв MySQL, можно создать некоего общего пользователяmulti_adminдля всех, с одинаковым паролем (см. ниже). Сделать это можно так:shell> mysql -u root -S /tmp/mysql.sock -proot_password -e "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY
See section 4.2.6 Как работает система привилегий. Эти действия нужно выполнять для каждогоmysqldдля каждой имеющейся директории данных (для этого нужно выбрать другой сокет-S=...). -
`pid-файл' играет очень важную роль, если для запуска
mysqldиспользуется сценарийsafe_mysqld(например,--mysqld=safe_mysqld). Преимущество использованияsafe_mysqldвместоmysqldзаключается в том, чтоsafe_mysqld``бережет'' каждый процессmysqldи перезапустит его, еслиmysqld-процесс умрет по сигналу 9 или подобному (например, в случае ошибки сегментации - хотя, конечно, уж этой ошибки MySQL в принципе совершать не должен;). Пожалуйста, обратите внимание: может оказаться, что сценарийsafe_mysqldтребуется запускать из определенного каталога. Это означает, что прежде чем запуститьmysqld_multi, прийдется перейти в нужный каталог. Если при запуске возникнут проблемы, пожалуйста, просмотрите сценарийsafe_mysqld. Обратите внимание на следующие строки:-------------------------------------------------------------------------- MY_PWD=`pwd` Check if we are starting this relative (for the binary release) if test -d /data/mysql -a -f ./share/mysql/english/errmsg.sys -a -x ./bin/mysqld -------------------------------------------------------------------------- Смотри раздел 4.7.2
Этот тест может пройти успешно, однако возможны и проблемы.safe_mysqld, оболочкаmysqld. -
Не запускайте несколько демонов
mysqldс одной и тожй же директорией данных. Используйте различные директории с данными, если Вы четко не уверены в своих действиях! -
Файл сокета и порт TCP/IP должны быть различными для каждого демона
mysqld. -
Первая и пятая группы
mysqldбыли преднамеренно не включены в пример. В файле конфигурации могут быть ``промежутки'' - это увеличивает гибкость. Порядок, в котором запускаются или завершают работу демоныmysqld, зависит от порядка, в котором они указаны в файле конфигурации. -
Когда нужно обратиться к некоторой группе (GNR) в этой программе,
просто используйте номер в конце имени группы. Например, GNR для группы
[mysqld17]- 17. -
Для
mysqldможно использовать опцию--user, но для этого сценарийmysqld_multiдолжен быть запущен отroot. Наличие опции в файле конфигурации не имеет значения; вы получите предупреждение только в случаях, если не являетесь суперпользователем и демонmysqldsзапущен под вашим аккаунтом Unix. Важно: удостоверьтесь, что дляpid-файлаи директории с данными имеется доступ для чтения+записи(+выполнения - для директории с данными) для того пользователя Unix, который запускает определенный процессmysqld. Не используйте для этого аккаунтrootв Unix, если Вы не уверены в своих действиях! -
Очень важно: удостоверьтесь, что вы понимаете значения опций, которые
передаются демонам
mysqld, и что осознаете то, почему могут быть нужны отдельные процессыmysqld. Запуск нескольких демоновmysqldс одной директорией данных не увеличит производительность в многопоточной системе!
See section 4.1.4 Запуск нескольких серверов MySQL на одном компьютере.
Пример файла конфигурации для mysqld_multi.
# Этот файл может находиться в вашей домашней директории (~/.my.cnf) или /etc/my.cnf # Version 2.1 by Jani Tolonen [mysqld_multi] mysqld = /usr/local/bin/safe_mysqld mysqladmin = /usr/local/bin/mysqladmin user = multi_admin password = multipass [mysqld2] socket = /tmp/mysql.sock2 port = 3307 pid-file = /usr/local/mysql/var2/hostname.pid2 datadir = /usr/local/mysql/var2 language = /usr/local/share/mysql/english user = john [mysqld3] socket = /tmp/mysql.sock3 port = 3308 pid-file = /usr/local/mysql/var3/hostname.pid3 datadir = /usr/local/mysql/var3 language = /usr/local/share/mysql/swedish user = monty [mysqld4] socket = /tmp/mysql.sock4 port = 3309 pid-file = /usr/local/mysql/var4/hostname.pid4 datadir = /usr/local/mysql/var4 language = /usr/local/share/mysql/estonia user = tonu [mysqld6] socket = /tmp/mysql.sock6 port = 3311 pid-file = /usr/local/mysql/var6/hostname.pid6 datadir = /usr/local/mysql/var6 language = /usr/local/share/mysql/japanese user = jani
Смотри раздел 4.1.2 Файлы параметров `my.cnf'.
