Quelle est la «façon Debian» d'installer plusieurs instances MySQL sur un seul serveur?

9

Connaissez-vous une «méthode Debian» pour configurer plusieurs instances MySQL sur un seul serveur? Le serveur recevrait des données répliquées à partir de plusieurs bases de données distantes.

Je pourrais utiliser des scripts comme mysqlsandbox mais je préfère m'en tenir aux paquets Debian et j'aimerais pouvoir mettre à jour la configuration sans trop de complications à l'avenir. Mysqlmanager est une autre solution - il fonctionne avec MySQL 5.1 mais il est obsolète et n'est plus publié avec 5.5.

Alors, quelle est la «meilleure pratique» pour exécuter plusieurs instances MySQL sur un seul serveur Debian?

pQd
la source
Aujourd'hui, le docker peut être utilisé dans de tels cas.
ALex_hha

Réponses:

12

Je pense que c'est aussi simple que d'exécuter mysqld_multiet de configurer correctement mon my.cnf. mysqld_multifait partie de la distribution mysql - pas un volant emballé.

Il existe un correctif à /usr/share/mysql/mysqld_multi.serverutiliser /etc/init.det un autre correctif à mysqld_multiutiliser /etc/mysql/conf.d.

Vous pouvez initialiser les répertoires de données MySQL pour de nouvelles instances avec la mysql_install_dbcommande comme ceci:

mysql_install_db --datadir=/var/lib/mysql2

N'oubliez pas de changer le mot de passe root de l'instance nouvellement créée:

mysqladmin --port 3307 --user=root password 'new-password'
mince
la source
Merci; L'utilisez-vous dans la pratique? des histoires / indices d'horreur?
pQd
1
Mon histoire d'horreur est une récupération de données de 2 jours car le script d'initialisation mysql de debian n'a pas arrêté gracieusement le mysql car l'arrêt a pris trop de temps. Depuis lors, je n'utilise pas le paquet debian mysql, seulement la distribution binaire de Percona et son initscript
Gabor Vincze
@GaborVincze - était-ce dans la configuration de mysqld_multi ou dans une installation "régulière" à instance unique de mysql?
pQd
C'était une installation régulière. An 5.1
Gabor Vincze
1
J'utilise mysqld_multi dans la pratique. Le plus difficile est que vous devez utiliser mysqld_multi / mysqladmin pour démarrer / arrêter les instances par rapport à /etc/init.d/mysqld restart - il n'y a pas beaucoup de scripts prédéfinis qui facilitent la tâche. Une fois que vous le maîtrisez, il devient obsolète et est un moyen très pratique de faire tourner une instance, par exemple, la récupération, la réplication retardée - peu importe.
Thinice
3

Sur Debian 8, vous pouvez utiliser le mécanisme Systemd: plus besoin de mysqld_multi.

REMARQUE: j'utilise la version MariaDB! Je ne sais pas si cela fonctionne avec le package MySQL «classique».

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

Version multi-instance de mariadb. Car si vous exécutez plusieurs versions à la fois. Également utilisé pour mariadb @ bootstrap pour bootstrap Galera.

créer un fichier de configuration /etc/mysql/conf.d/ mon {nom d'instance} .cnf

démarrer en tant que systemctl start mariadb@{instancename}.server

Donc, créez un fichier /etc/mysql/conf.d/myserver2.cnf, et spécifiez-y de nouveaux fichiers pid / socket / datadir et un port réseau:

[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: attention à ce que la première instance MySQL ne lise pas ce fichier de configuration, avec !includedir /etc/mysql/conf.d/*en bas de /etc/mysql/my.cnf. Si c'est le cas, remplacez le !includedirpar un !includede chaque fichier de configuration AUTRE QUE myserver2.cnf:

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

Le doc officiel de MySQL indique que vous devez nommer [mysqld]comme [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) , mais cela ne fonctionne pas avec MariaDB . Alors laissez-le [mysqld].

Avant de démarrer le nouveau démon, n'oubliez pas de créer le datadir et les fichiers nécessaires:

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

Rechargez également la configuration du démon systemd:

systemctl daemon-reload

Et si vous voulez démarrer ce démon au démarrage:

systemctl enable mariadb@server2

Pour le démarrer:

service mariadb@server2 start
Pire
la source
Le principal mysql (non instancié) lit /etc/my.cnf, c'est pourquoi.
Michael Hampton
J'ai édité ma réponse: en fait, il semble que la première instance lise le fichier server2.cnf, avec !includedir /etc/mysql/conf.d/*. Pour une meilleure sécurité, j'ai inclus chaque conf.dfichier manuellement
Pire