7.8.3 Запуск нескольких экземпляров MySQL на Unix
В этом обсуждении используется mysqld_safe для запуска нескольких экземпляров MySQL. При установке MySQL с помощью RPM-распространения запуск и остановка сервера на некоторых платформах Linux управляются systemd. На этих платформах mysqld_safe не устанавливается, так как он не нужен. Сведения о работе с systemd для управления несколькими экземплярами MySQL см. в разделе 2.5.9 «Управление сервером MySQL с помощью systemd».
Один из способов запуска нескольких экземпляров MySQL на Unix — это компиляция разных серверов с разными значениями по умолчанию для портов TCP/IP и файлов сокетов Unix, чтобы каждый из них прослушивал разные сетевые интерфейсы. Компиляция в разных базовых каталогах для каждой установки также автоматически приводит к раздельному расположению каталога данных, файла журнала и файла PID для каждого сервера.
Предположим, что существующий сервер 8.3 настроен для номера порта TCP/IP по умолчанию (3306) и файла сокета Unix (/tmp/mysql.sock). Чтобы настроить новый сервер 8.4.4 с другими параметрами работы, используйте команду CMake примерно такого вида:
$> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-8.4.4
Здесь port_number и file_name должны отличаться от номера порта TCP/IP по умолчанию и имени файла сокета Unix, а значение CMAKE_INSTALL_PREFIX должно указывать каталог установки, отличающийся от каталога, в котором расположена существующая установка MySQL.
Если у вас есть сервер MySQL, прослушивающий заданный номер порта, вы можете использовать следующую команду, чтобы узнать параметры работы, используемые для нескольких важных настраиваемых переменных, включая базовый каталог и имя файла сокета Unix:
$> mysqladmin --host=host_name --port=port_number variables
Используя информацию, отображаемую этой командой, вы можете узнать, какие значения параметров не следует использовать при конфигурировании дополнительного сервера.
Если вы укажете localhost в качестве имени хоста, mysqladmin по умолчанию использует файл сокета Unix, а не TCP/IP. Для явного указания транспортного протокола используйте опцию --protocol={TCP|SOCKET|PIPE|MEMORY}.
Не обязательно компилировать новый сервер MySQL только для запуска с другим файлом сокета Unix и номером порта TCP/IP. Также возможно использовать один и тот же бинарный файл сервера и запускать каждый вызов с разными значениями параметров во время выполнения. Один из способов сделать это — использовать параметры командной строки:
$> mysqld_safe --socket=file_name --port=port_number
Чтобы запустить второй сервер, укажите разные значения параметров --socket и --port и передайте параметр --datadir= в mysqld_safe, чтобы сервер использовал другой каталог данных.dir_name
В качестве альтернативы поместите параметры для каждого сервера в разные файлы параметров, затем запустите каждый сервер, используя параметр --defaults-file, который указывает путь к соответствующему файлу параметров. Например, если файлы параметров для двух экземпляров сервера называются /usr/local/mysql/my.cnf и /usr/local/mysql/my.cnf2, запустите серверы следующим образом:
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
$> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2
Другой способ достижения аналогичного эффекта — использование переменных среды для установки имени файла сокета Unix и номера порта TCP/IP:
$> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
$> MYSQL_TCP_PORT=3307
$> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
$> bin/mysqld --initialize --user=mysql
$> mysqld_safe --datadir=/path/to/datadir &
Это быстрый способ запуска второго сервера для тестирования. Преимущество этого метода заключается в том, что настройки переменных среды применяются ко всем клиентским программам, которые вы вызываете из одной оболочки. Таким образом, подключения для этих клиентов автоматически направляются на второй сервер.
Раздел 6.9 «Переменные среды» содержит список других переменных среды, которые можно использовать для влияния на программы MySQL.
В Unix скрипт mysqld_multi предоставляет другой способ запуска нескольких серверов. См. раздел 6.3.4 «mysqld_multi — Управление несколькими серверами MySQL».
© 2025 Oracle
Licensed under the GPLv2 License.