Я только что установил 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, но это больше не поддерживается, если я понимаю право документации.
Я не знаю, является ли это правильным путем, но это - то, как я сделал это. Оставьте комментарий, если существует что-то не так здесь.
Мой/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-файл не был создан, поскольку он говорит в каждой документации, что я мог найти.
Выше решения хорошо работает, но сделать это совместимым с решением для справочника 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. сервис).