Wie kann Debian mehrere MySQL-Instanzen auf einem einzigen Server installieren?

9

Kennen Sie eine Debian-Methode zum Einrichten mehrerer MySQL-Instanzen auf einem einzelnen Server? Der Server empfängt Daten, die von mehreren entfernten Datenbanken repliziert wurden.

Ich könnte Skripte wie mysqlsandbox verwenden, aber ich halte mich lieber an Debian-Pakete und möchte das Setup in Zukunft ohne große Komplikationen aktualisieren können. Eine andere Lösung ist mysqlmanager - es funktioniert mit MySQL 5.1, ist jedoch veraltet und wird mit 5.5 nicht mehr veröffentlicht.

Was ist die beste Vorgehensweise, um mehrere MySQL-Instanzen auf einem einzelnen Debian-Server auszuführen?

pQd
quelle
Heutzutage kann Docker in solchen Fällen verwendet werden.
ALex_hha

Antworten:

12

Ich glaube, es ist so einfach wie das Ausführen mysqld_multiund Einrichten Ihrer my.cnf. mysqld_multiist ein Teil der MySQL-Distribution - keine verpackte Rüsche.

Es gibt einen Patch , der /usr/share/mysql/mysqld_multi.serverfür die Verwendung geeignet ist, /etc/init.dund einen weiteren Patch, in dem mysqld_multiDateien verwendet werden können /etc/mysql/conf.d.

Sie können MySQL-Datenverzeichnisse für neue Instanzen mit dem folgenden mysql_install_dbBefehl initialisieren :

mysql_install_db --datadir=/var/lib/mysql2

Vergessen Sie nicht, das Root-Passwort der neu erstellten Instanz zu ändern:

mysqladmin --port 3307 --user=root password 'new-password'
dünnes Eis
quelle
Vielen Dank; Verwenden Sie es in der Praxis? irgendwelche Horrorgeschichten / Hinweise?
pQd
1
Meine Horrorgeschichte ist eine 2-tägige Datenwiederherstellung, da das MySQL-Init-Skript von Debian das MySQL nicht ordnungsgemäß heruntergefahren hat, da das Herunterfahren zu lange gedauert hat. Seitdem verwende ich kein Debian-MySQL-Paket, sondern nur Perconas Binärdistribution und das darin enthaltene Initscript
Gabor Vincze
@GaborVincze - war es im Setup von mysqld_multi oder in der 'regulären' Installation einer einzelnen MySQL-Instanz?
pQd
Es war eine regelmäßige Installation. Ein 5.1
Gabor Vincze
1
Ich benutze mysqld_multi in der Praxis. Der schwierigste Teil ist, dass Sie mysqld_multi / mysqladmin verwenden müssen, um die Instanzen im Vergleich zum Neustart von /etc/init.d/mysqld zu starten / herunterzufahren - es gibt nicht viele vordefinierte Skripte, die es einfach machen. Sobald Sie es beherrschen, wird es zu einem alten Hut und ist eine sehr bequeme Möglichkeit, eine Instanz zu starten, z. B. Wiederherstellung, verzögerte Replikation - was auch immer.
Thinice
3

Unter Debian 8 können Sie den Systemd-Mechanismus verwenden: keine Notwendigkeit mehr mysqld_multi.

HINWEIS: Ich verwende die MariaDB-Version! Ich bin mir nicht sicher, ob es mit dem 'klassischen' MySQL-Paket funktioniert.

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

Multi-Instanz-Version von Mariadb. Wenn Sie mehrere Versionen gleichzeitig ausführen. Wird auch für mariadb @ bootstrap verwendet, um Galera zu booten.

Erstellen Sie die Konfigurationsdatei /etc/mysql/conf.d/ my {instancename} .cnf

Starten Sie als systemctl. Starten Sie mariadb@{instancename}.server

Erstellen Sie also eine Datei /etc/mysql/conf.d/myserver2.cnfund geben Sie darin neue pid / socket / datadir-Dateien und den Netzwerkport an:

[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: vorsicht , dass erste MySQL - Instanz nicht über diese Konfigurationsdatei lesen, mit !includedir /etc/mysql/conf.d/*am unteren Ende /etc/mysql/my.cnf. Wenn dies der Fall ist, ersetzen Sie die !includedirdurch eine !includevon jeder Konfigurationsdatei ANDERE ALS myserver2.cnf:

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

Die MySQL offiziell doc zeigen Sie Namen [mysqld]wie [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) , aber das funktioniert nicht mit MariaDB . Also lass es einfach [mysqld].

Vergessen Sie vor dem Starten des neuen Daemons nicht, den Datenverzeichnis und die benötigten Dateien zu erstellen:

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

Laden Sie auch die Systemd Daemon-Konfiguration neu:

systemctl daemon-reload

Und wenn Sie diesen Daemon beim Booten starten möchten:

systemctl enable mariadb@server2

Um es zu starten:

service mariadb@server2 start
Am schlimmsten
quelle
Das wichtigste (nicht instanziierte) MySQL lautet /etc/my.cnf, deshalb.
Michael Hampton
Ich habe meine Antwort bearbeitet: Tatsächlich scheint es, dass die erste Instanz die Datei server2.cnf mit gelesen hat !includedir /etc/mysql/conf.d/*. Zur besseren Sicherheit habe ich jede conf.dDatei manuell eingefügt
schlechtesten