Второй экземпляр (инстанс) MySQL на одной машине в CentOS 7

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

Всё делается с помощью возможности systemd работать не просто со службами, но с именованными инстансами служб. Таким образом, всё что остаётся сделать:

  1. Добавить в основной файл конфигурации mysql (а можете сделать это отдельным файлом и подключить к основному) новую секцию, которая будет называться mysql@имя_инстанса. Примемем как допущение, что имя инстанса у нас будет «slave», тогда обязательная часть новой секции будет выглядеть так:
    [mysqld@slave]
    port = 3307
    datadir=/var/lib/mysql_slave
    socket=/var/lib/mysql_slave/mysql.sock
    tmpdir=/var/lib/mysql_slave/tmp
    log-error=/var/log/mysqld_slave.log
    pid-file=/var/run/mysqld/mysqld_slave.pid

    Как вы уже поняли, здесь необходимо выбрать другой порт, для сетевого подключения (потому что два разных процесса не могут работать с одним и тем же портом), а также переопределить каталог, где будут хранится данные и другие каталоги и файлы, которые не могут использоваться одновременно двумя разными инстансами MySQL.

    Не забудьте и про остальные директивы/переменные конфигурации. Если вы их не укажете, они будут установлены в значения по умолчанию и НЕ БУДУТ унаследованы из секции [mysql].

  2. Создайте требуемые каталоги вручную, установите на них владельца, группу и права доступа такие же как для основного инстанса MySQL.
  3. Убедитесь в наличие файла /usr/lib/systemd/system/mysqld@.service. Именно он будет отвечать за запуск и остановку службы с именем инстанса. Обычно он присутствует в пакетах всех современных версий MySQL, даже от сторонних производителей, типа Percona или MySQL Community Edition. Но если у вас вдруг его не оказалось, найдите пакет от другого производителя, возьмите файл оттуда и адаптируйте под себя.
  4. Выполните команду инициализации хранилища MySQL:
    mysqld --datadir=/var/lib/mysql_slave --initialize

    Это можно сделать от root’а, но не забудьте потом поправить права доступа на каталог /var/lib/mysql_slave и находящиеся внутри него файлы:

    chown -R mysql:mysql mysql_slave
  5. Запустите новый инстанс:
    systemctl start mysqld@slave

    убедитесь, что он запустился, выполнив команду

    ps ax|grep mysql
  6. Не забывайте, что при подключении к новому инстансу через сокет, необходимо ЯВНО указывать путь до сокета, т.е.:
    mysql --socket=/var/lib/mysql_slave/mysql.sock

 

admin has written 75 articles

Leave a Reply