MySQL: várias instâncias usando systemd

1

Acabei de instalar o Ubuntu 17.10 e quero executar o MySQL com várias instâncias. Eu li a documentação do MySQL sobre isso ( link ), mas ainda não entenda.

Eu desativei o perfil do apparmor para o mysql e adicionei essas linhas /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

É suficiente copiar /lib/systemd/system/mysql.service para /lib/systemd/system/[email protected] ou eu preciso modificar de alguma forma? Porque se eu apenas copiá-lo e executar

systemctl start mysql@replica01

Ele apenas iniciará a instância padrão do MySQL na porta 3306. E se eu iniciar o mysql @ replica02, ele não será iniciado, já que ele tenta iniciar a mesma instância e eu acabei de receber um monte de

Unable to lock ./ibdata1 error: 11

O que estou perdendo aqui? A única coisa que posso encontrar on-line sobre isso são postagens antigas antes que isso fosse suportado em arquivos .deb. Mas, desde a versão 5.7.19, isso deve funcionar e, como está escrito, a versão é a 5.7.21, que é instalada a partir do repositório da Ubuntus.

Eu tenho uma instalação antiga em uma máquina Debian que está usando o mysqld_multi mas isso não é mais suportado se eu entendi a documentação correta.

Obrigado,

    
por PatricF 07.03.2018 / 13:48

2 respostas

0

Eu não sei se este é o caminho certo, mas é assim que eu fiz. Por favor, deixe um comentário se houver algo errado aqui.

Meu /lib/systemd/system/[email protected] é assim:

[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

Eu criei um arquivo de configuração separado para cada instância em /etc/mysql/mysql.conf.d com os nomes my_replica01.cnf etc. Eu apenas copiei o arquivo de configuração principal do MySQL e mudei os caminhos e o número da porta. Então eu criei a pasta de dados para cada instância assim:

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

etc.

Então inicializei a instância com:

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

Depois tive que recarregar o systemd depois que adicionei o mysql @ .service -file

systemctl daemon-reload

Depois, ative as instâncias com:

systemctl enable mysql@replica01
systemctl enable mysql@replica02

Agora, as instâncias são iniciadas automaticamente quando o servidor é inicializado. Para iniciá-los manualmente, basta executar:

systemctl start mysql@replica01

EDITAR:

Só para adicionar, tive que me conectar à instância usando o soquete assim:

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

Em seguida, altere a senha, etc., para a conta raiz. Por alguma razão, o arquivo .mysql_secret não foi criado como diz em toda documentação que encontrei.

    
por PatricF 08.03.2018 / 10:53
0
A solução acima funciona bem, mas para torná-la compatível com a solução manual de referência do MySQL (arquivo de opções únicas e --defaults-group-suffix) /lib/systemd/system/[email protected] deve ficar assim:

# 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, não há /lib/systemd/system/[email protected] no Ubuntu por padrão, então tem que ser adicionado manualmente (e não funciona se você simplesmente copiar / lib / systemd / system / mysql .service para /lib/systemd/system/[email protected]).

    
por mprot 03.08.2018 / 02:01