MySQL: несколько экземпляров с помощью systemd

Я только что установил Ubuntu 17.10, и я хочу выполнить MySQL с несколькими экземплярами. Я прочитал документацию MySQL об этом (https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html), но я все еще не понимаю.

Я отключил профиль apparmor для mysql и добавил эти строки к/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log

[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log

Достаточно скопировать/lib/systemd/system/mysql.service в/lib/systemd/system/mysql. сервис или я должны изменить его так или иначе? Поскольку, если я просто копирую его и работаю

systemctl start mysql@replica01

Это только запустит экземпляр MySQL по умолчанию на порте 3306. И если я запущу mysql@replica02, то это не запустится, так как это пытается запустить тот же экземпляр, и я просто получаю набор

Не мог заблокировать./ibdata1 ошибку: 11

Что я пропускаю здесь? Единственной вещью, которую я могу найти онлайн об этом, являются старые сообщения, прежде чем это поддерживалось в .deb-файлах. Но начиная с версии 5.7.19 это должно работать и с записи этого, версия 5.7.21, который установлен от Ubuntus repo.

У меня есть старая установка на машине Debian, которая использует mysqld_multi, но это больше не поддерживается, если я понимаю право документации.

1
задан 13 November 2018 в 13:04

2 ответа

Я не знаю, является ли это правильным путем, но это - то, как я сделал это. Оставьте комментарий, если существует что-то не так здесь.

Мой/lib/systemd/system/mysql. сервис похож на это:

[Unit]
Description=Multi Instance MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStart=/usr/sbin/mysqld --defaults-file=/etc/mysql/mysql.conf.d/my_%I.cnf
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755

Я затем создал отдельный файл конфигурации для каждого, инстанцирует в/etc/mysql/mysql.conf.d с именами my_replica01.cnf и т.д. Я просто скопировал основной файл конфигурации с MySQL и изменил пути и номер порта. Затем я создал папку данных для каждого экземпляра как это:

mkdir /var/lib/mysql-replica01
mkdir /var/lib/mysql-replica02
chown -R mysql:mysql /var/lib/mysql-replica*

и т.д.

Затем я инициализировал экземпляр с:

mysqld --user=mysql --initialize --datadir=/var/lib/mysql-replica01

Затем я должен был перезагрузить systemd после того, как я добавил mysql@.service-file

systemctl daemon-reload

Затем просто включите экземпляры с:

systemctl enable mysql@replica01
systemctl enable mysql@replica02

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

systemctl start mysql@replica01

Править:

Только для добавления я должен был соединиться с экземпляром с помощью сокета как это:

mysql -S /var/lib/mysql-replica01/mysql.sock -p

И затем измените пароль и т.д. для корневой учетной записи. По некоторым причинам .mysql_secret-файл не был создан, поскольку он говорит в каждой документации, что я мог найти.

0
ответ дан 8 December 2019 в 02:07

Выше решения хорошо работает, но сделать это совместимым с решением для справочника MySQL (единственный файл опций и - суффикс группы значений по умолчанию)/lib/systemd/system/mysql. сервис должен быть похожим на это:

# MySQL systemd service file

[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
PermissionsStartOnly=true
ExecStart=/usr/sbin/mysqld --defaults-group-suffix=@%I
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755

BTW, нет никакого/lib/systemd/system/mysql. сервис в Ubuntu по умолчанию, таким образом, это должно быть добавлено вручную (и это не работает, если Вы просто копируете/lib/systemd/system/mysql.service в/lib/systemd/system/mysql. сервис).

0
ответ дан 8 December 2019 в 02:07

Другие вопросы по тегам:

Похожие вопросы: