В инете достаточно мануалов, где вручную поднимают второй инстанс mysql: копируют папки с данными БД, скрипты в /etc/init.d/, дергают mysql_install_db и т.д. При этом не всегда опишут, как сделать, чтобы второй инстанс можно было так же, как и первый, удобно запускать и тормозить через systemctl.
Ковыряясь с последней задачей, я закопался в скриптах /lib/lsb/init-functions, /usr/share/mysql/mysql-helpers и в системе systemd.
Короче выяснилось, что инстанс можно запустить с закрытыми глазами одной рукой за минуту.
есть такая штука# ls -l /lib/systemd/system/my*-rw-r--r-- 1 root root 1652 Dec 10 2020 /lib/systemd/system/mysql.service-rw-r--r-- 1 root root 1780 Jan 27 17:19 /lib/systemd/system/mysql@.service
systemctl enable mysql@2
а чтобы каждый инстанс имел свой pid, sock и datadir, достаточно добавить в /etc/mysql/conf.d небольшой конфиг для него (расширение .cnf обязательно)
[mysqld@2]
socket = /var/run/mysqld/mysqld2.sock
datadir = /var/lib/mysql2
log-error = /var/lib/mysql2/error.log
port = 3308
server-id = 4
фокус в следующем
Т.е. в [mysqld] пишем все основные настройки, а для нового инстанса в [mysqld@2] прописываем особые пути к сокету, pid, datadir, server-id и все, что еще потребуется.
Осталось запустить. Но сначала рекомендуется немного подправить новый сервис командой
systemctl edit mysql@2В редакторе надо вписать
[Service]сохранить и выйти. Это нужно, чтобы при остановке инстанса папка /var/run/mysqld не удалялась вместе с pid/sock-файлами остальных инстансов.
RuntimeDirectoryPreserve=1
Теперь запуск
$ systemctl start mysql@2Первый запуск может затянуться из-за инициализации сервера БД
Доступ в консоль возможен без пароля, если подключаться из-под рута и по сокету
$ mysql -S /var/run/mysqld/mysqld2.sock
Таким образом можно быстро развернуть новый сервер из копии папки имеющегося, но нужно предварительно удалить из нее файл auto.cnf, там прописан server-uuid, файл создастся сам при запуске нового сервера.
Бонус
cp /lib/systemd/system/memcached.service /lib/systemd/system/memcached@.service
Правим, добавляя %i ко всем важным параметрам, типа pid, sock, conf.
Например, команда запуска становится такой
ExecStart=/usr/share/memcached/scripts/systemd-memcached-wrapper /etc/memcached/memcached-%i.confДальше все, как для mysql: systemctl enable, systemctl start.
Комментариев нет:
Отправить комментарий