Qual è il "modo Debian" di installare più istanze MySQL su un singolo server?


9

Conoscete qualche "modo Debian" di configurare più istanze MySQL su un singolo server? Il server riceverà i dati replicati da più database remoti.

Potrei usare script come mysqlsandbox ma preferisco attenermi ai pacchetti Debian e vorrei essere in grado di aggiornare l'installazione senza troppe complicazioni in futuro. Un'altra soluzione è mysqlmanager : funziona con MySQL 5.1 ma è obsoleto e non viene più rilasciato con 5.5.

Quindi qual è la 'best practice' per eseguire più istanze MySQL su un singolo server Debian?


Al giorno d'oggi la finestra mobile può essere utilizzata in questi casi.
ALex_hha,

Risposte:


12

Credo che sia semplice come eseguire mysqld_multie configurare correttamente my.cnf. mysqld_multifa parte della distribuzione mysql, non un arricciamento impacchettato.

C'è una patch per rendere /usr/share/mysql/mysqld_multi.serverappropriato per l'uso in /etc/init.de un'altra patch per fare mysqld_multiuso dei file /etc/mysql/conf.d.

Puoi inizializzare le directory dei dati MySQL per le nuove istanze con il mysql_install_dbcomando in questo modo:

mysql_install_db --datadir=/var/lib/mysql2

Non dimenticare di modificare la password di root dell'istanza appena creata:

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

Grazie; lo usi in pratica? eventuali storie / suggerimenti horror?
pQd

1
La mia storia dell'orrore è un recupero di dati della durata di 2 giorni a causa dello script mysql init di debian che non stava spegnendo con grazia il mysql perché l'arresto ha richiesto troppo tempo. Da allora non uso il pacchetto debian mysql, ma solo la distribuzione binaria di Percona e l'initscript in esso
Gabor Vincze

@GaborVincze - era nell'installazione di mysqld_multi o nell'installazione 'normale' di istanza singola-mysql?
pQd

Era un'installazione regolare. An 5.1
Gabor Vincze

1
Uso mysqld_multi in pratica. La parte più difficile è che devi usare mysqld_multi / mysqladmin per avviare / chiudere le istanze contro /etc/init.d/mysqld restart - non c'è un terribile sacco di script preconfigurati che lo rendono facile. Una volta padroneggiato, diventa vecchio cappello ed è un modo molto conveniente per girare un'istanza per dire, recupero, replica ritardata - qualunque cosa.
thinice

3

Su Debian 8, puoi usare il meccanismo Systemd: non è più necessario mysqld_multi.

NOTA: utilizzo la versione MariaDB! Non sono sicuro che funzioni con il pacchetto MySQL "classico".

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

Versione multi istanza di mariadb. Perché se esegui più versioni contemporaneamente. Utilizzato anche per mariadb @ bootstrap per bootstrap Galera.

creare il file di configurazione /etc/mysql/conf.d/ my {nome istanza} .cnf

avvia come systemctl avvia mariadb@{instancename}.server

Quindi, crea un file /etc/mysql/conf.d/myserver2.cnfe specifica al suo interno i nuovi file pid / socket / datadir e la porta di rete:

[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: fai attenzione che la prima istanza di MySQL non legga questo file di configurazione, con !includedir /etc/mysql/conf.d/*in fondo a /etc/mysql/my.cnf. In tal caso, sostituisci !includedircon uno !includedi ciascun file di configurazione ALTRO DI myserver2.cnf:

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

Il documento ufficiale di MySQL indica che devi nominare [mysqld]come [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-iststances ) ma questo non funziona con MariaDB . Quindi lascialo [mysqld].

Prima di avviare il nuovo demone, non dimenticare di creare il datadir e i file necessari:

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

Ricarica anche la configurazione del demone systemd:

systemctl daemon-reload

E se vuoi avviare questo demone all'avvio:

systemctl enable mariadb@server2

Per avviarlo:

service mariadb@server2 start

Il mysql principale (non istanziato) legge /etc/my.cnf, ecco perché.
Michael Hampton,

Ho modificato la mia risposta: in effetti sembra che la prima istanza abbia letto il file server2.cnf con !includedir /etc/mysql/conf.d/*. Per una migliore sicurezza, ho incluso conf.dmanualmente ogni file
Peggiore il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.