Qual é a 'maneira Debian' de instalar várias instâncias do MySQL em um único servidor?


9

Você conhece alguma 'maneira Debian' de configurar várias instâncias do MySQL em um único servidor? O servidor receberia dados replicados de vários bancos de dados remotos.

Eu poderia usar scripts como mysqlsandbox, mas prefiro manter os pacotes Debian e gostaria de poder atualizar a instalação sem muitas complicações no futuro. Outra solução é o mysqlmanager - ele funciona com o MySQL 5.1, mas está obsoleto e não é mais lançado com o 5.5.

Então, qual é a 'melhor prática' de executar várias instâncias do MySQL em um único servidor Debian?


Atualmente, a janela de encaixe pode ser usada nesses casos.
ALex_hha

Respostas:


12

Acredito que seja tão simples quanto executar mysqld_multie configurar seu my.cnf corretamente. mysqld_multifaz parte da distribuição do mysql - não é um pacote.

um patch para tornar /usr/share/mysql/mysqld_multi.serverapropriado o uso /etc/init.de outro patch para mysqld_multiusar os arquivos /etc/mysql/conf.d.

Você pode inicializar os diretórios de dados do MySQL para novas instâncias com o mysql_install_dbcomando desta forma:

mysql_install_db --datadir=/var/lib/mysql2

Não se esqueça de alterar a senha raiz da instância recém-criada:

mysqladmin --port 3307 --user=root password 'new-password'

obrigado; você usa isso na prática? alguma história de terror / dicas?
PQD

1
Minha história de horror é uma recuperação de dados de 2 dias por causa do script init do mysql do debian não estar desligando normalmente o mysql porque o desligamento demorou muito. Desde então eu não usar debian pacote mysql, apenas a distribuição binária do Percona eo initscript nele
Gabor Vincze

@GaborVincze - foi na instalação do mysqld_multi ou na instalação 'regular' de instância do mysql única?
PQD

Era uma instalação regular. Um 5.1
Gabor Vincze

1
Eu uso o mysqld_multi na prática. A parte mais difícil é que você precisa usar o mysqld_multi / mysqladmin para iniciar / desligar as instâncias versus /etc/init.d/mysqld restart - não há muitos scripts pré-definidos que facilitam a tarefa. Depois de dominá-lo, ele se torna obsoleto e é uma maneira muito conveniente de criar uma instância, por exemplo, recuperação, replicação atrasada - qualquer que seja.
thinice

3

No Debian 8, você pode usar o mecanismo Systemd: não é mais necessário mysqld_multi.

NOTA: Eu uso a versão MariaDB! Não tenho certeza se ele funciona com o pacote MySQL 'clássico'.

De /lib/systemd/system/mariadb@.service:

Versão de várias instâncias do mariadb. Pois se você executar várias versões de uma só vez. Também usado para mariadb @ bootstrap para iniciar o Galera.

crie o arquivo de configuração /etc/mysql/conf.d/ my {instancename} .cnf

iniciar como systemctl start mariadb@{instancename}.server

Portanto, crie um arquivo /etc/mysql/conf.d/myserver2.cnfe especifique nele novos arquivos pid / socket / datadir e porta de rede:

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld/mysqld-server2.pid
socket      = /var/run/mysqld/mysqld-server2.sock
port        = 3307
basedir     = /usr
datadir     = /var/lib/mysql-server2
tmpdir      = /tmp

EDIT: tenha cuidado para que a primeira instância do MySQL não leia este arquivo de configuração, !includedir /etc/mysql/conf.d/*na parte inferior de /etc/mysql/my.cnf. Se for esse o caso, substitua o !includedirpor um !includede cada arquivo de configuração, exceto o myserver2.cnf:

#!includedir /etc/mysql/conf.d/*
!include /etc/mysql/conf.d/conf1.cnf
!include /etc/mysql/conf.d/confX.cnf

O documento oficial do MySQL indica que você deve nomear [mysqld]como [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ), mas isso não funciona com o MariaDB . Então apenas deixe [mysqld].

Antes de iniciar o novo daemon, não se esqueça de criar o datadir e os arquivos necessários:

mkdir /var/lib/mysql-server2
chown mysql:mysql /var/lib/mysql-server2
mysql_install_db --datadir=/var/lib/mysql-server2

Atualize também a configuração do daemon systemd:

systemctl daemon-reload

E se você deseja iniciar este daemon na inicialização:

systemctl enable mariadb@server2

Para iniciá-lo:

service mariadb@server2 start

O principal (não instanciado) mysql lê /etc/my.cnf, é por isso.
Michael Hampton

Editei minha resposta: de fato, parece que a primeira instância leu o arquivo server2.cnf, com !includedir /etc/mysql/conf.d/*. Para maior segurança, incluí cada conf.darquivo manualmente
Pior
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.