¿Cuál es la 'forma Debian' de instalar múltiples instancias MySQL en un solo servidor?

9

¿Conoces alguna 'forma Debian' de configurar múltiples instancias MySQL en un solo servidor? El servidor recibiría datos replicados de múltiples bases de datos remotas.

Podría usar scripts como mysqlsandbox pero prefiero seguir con los paquetes de Debian y me gustaría poder actualizar la configuración sin muchas complicaciones en el futuro. Otra solución es mysqlmanager : funciona con MySQL 5.1 pero está en desuso y ya no se publica con 5.5.

Entonces, ¿cuál es la 'mejor práctica' para ejecutar múltiples instancias MySQL en un solo servidor Debian?

pQd
fuente
Hoy en día se puede usar docker en tales casos.
ALex_hha

Respuestas:

12

Creo que es tan simple como ejecutar mysqld_multiy configurar su my.cnf correctamente. mysqld_multies parte de la distribución de mysql, no un paquete de volantes.

Hay un parche para hacer /usr/share/mysql/mysqld_multi.serverapropiada para su uso en /etc/init.dy otro parche para hacer mysqld_multiarchivos de uso en /etc/mysql/conf.d.

Puede inicializar directorios de datos MySQL para nuevas instancias con el mysql_install_dbcomando como este:

mysql_install_db --datadir=/var/lib/mysql2

No olvide cambiar la contraseña de root de la instancia recién creada:

mysqladmin --port 3307 --user=root password 'new-password'
hielo delgado
fuente
Gracias; ¿Lo usas en la práctica? alguna historia de terror / pistas?
pQd
1
Mi historia de terror es una recuperación de datos de 2 días debido a que el script de inicio mysql de debian no cerró con gracia el mysql porque el apagado tardó demasiado. Desde entonces no uso el paquete debian mysql, solo la distribución binaria de Percona y el initscript que contiene
Gabor Vincze
@GaborVincze: ¿estaba en la instalación de mysqld_multi o en la instalación 'regular' de una sola instancia de mysql?
pQd
Fue una instalación regular. Un 5.1
Gabor Vincze
1
Yo uso mysqld_multi en la práctica. La parte más difícil es que debe usar mysqld_multi / mysqladmin para iniciar / cerrar las instancias versus /etc/init.d/mysqld restart: no hay una gran cantidad de scripts pre-enlatados que lo hagan fácil. Una vez que lo domine, se vuelve viejo y es una forma muy conveniente de activar una instancia, por ejemplo, recuperación, replicación retrasada, lo que sea.
thinice
3

En Debian 8, puede usar el mecanismo Systemd: no necesita más mysqld_multi.

NOTA: Yo uso la versión MariaDB! No estoy seguro si funciona con el paquete MySQL 'clásico'.

De /lib/systemd/system/[email protected]:

Versión de instancia múltiple de mariadb. Porque si ejecutas múltiples versiones a la vez. También se utiliza para mariadb @ bootstrap a bootstrap Galera.

crear archivo de configuración /etc/mysql/conf.d/ my {instancename} .cnf

iniciar como systemctl iniciar mariadb@{instancename}.server

Por lo tanto, cree un archivo /etc/mysql/conf.d/myserver2.cnfy especifique en él nuevos archivos pid / socket / datadir y puerto de red:

[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

EDITAR: tenga cuidado de que la primera instancia de MySQL no lea este archivo de configuración, !includedir /etc/mysql/conf.d/*en la parte inferior de /etc/mysql/my.cnf. Si es el caso, reemplace el archivo !includedircon uno !includede cada archivo de configuración que NO sea myserver2.cnf:

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

El documento oficial de MySQL indica que debe nombrar [mysqld]como [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) pero esto no funciona con MariaDB . Así que solo déjalo [mysqld].

Antes de comenzar el nuevo demonio, no olvides crear el datadir y los archivos necesarios:

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

Vuelva a cargar también la configuración del demonio systemd:

systemctl daemon-reload

Y si quieres iniciar este demonio en el arranque:

systemctl enable mariadb@server2

Para comenzarlo:

service mariadb@server2 start
Peor
fuente
Las principales lecturas de mysql (no instanciadas) /etc/my.cnf, es por eso.
Michael Hampton
Edité mi respuesta: de hecho, parece que la primera instancia LEA el archivo server2.cnf, con !includedir /etc/mysql/conf.d/*. Para una mejor seguridad, incluí cada conf.darchivo manualmente
peor