W jaki sposób Debian instaluje wiele instancji MySQL na jednym serwerze?

9

Czy znasz jakiś „sposób Debiana” na konfigurowanie wielu instancji MySQL na jednym serwerze? Serwer otrzyma dane zreplikowane z wielu zdalnych baz danych.

Mógłbym używać skryptów takich jak mysqlsandbox, ale wolę trzymać się pakietów Debiana i chciałbym móc aktualizować instalację bez większych komplikacji w przyszłości. Innym rozwiązaniem jest mysqlmanager - działa z MySQL 5.1, ale jest przestarzały i nie jest już wydawany w wersji 5.5.

Więc jaka jest najlepsza praktyka uruchamiania wielu instancji MySQL na jednym serwerze Debian?

pQd
źródło
Obecnie w takich przypadkach można używać dokera.
ALex_hha,

Odpowiedzi:

12

Uważam, że to tak proste, jak mysqld_multiprawidłowe uruchomienie i konfiguracja pliku my.cnf. mysqld_multijest częścią dystrybucji mysql - a nie pakietową falbanką.

Dostępna jest łatka do /usr/share/mysql/mysqld_multi.serverużycia /etc/init.di kolejna łatka do mysqld_multiużywania plików /etc/mysql/conf.d.

Możesz zainicjować katalogi danych MySQL dla nowych instancji za pomocą następującego mysql_install_dbpolecenia:

mysql_install_db --datadir=/var/lib/mysql2

Nie zapomnij zmienić hasła roota nowo utworzonej instancji:

mysqladmin --port 3307 --user=root password 'new-password'
cienki lód
źródło
dzięki; czy używasz go w praktyce? jakieś horrory / wskazówki?
pQd
1
Moja horror to 2-dniowe odzyskiwanie danych, ponieważ skrypt inicjujący debiana mysql nie wyłączał się z wdziękiem mysql, ponieważ zamykanie trwało zbyt długo. Od tamtej pory nie używam pakietu debian mysql, tylko dystrybucję binarną Percony i skrypt initscript
Gabor Vincze
@GaborVincze - czy było to w konfiguracji mysqld_multi czy w „zwykłej” instalacji pojedynczej instancji mysql?
pQd,
To była zwykła instalacja. 5.1
Gabor Vincze
1
Używam mysqld_multi w praktyce. Najtrudniejsze jest to, że musisz użyć mysqld_multi / mysqladmin, aby uruchomić / zamknąć instancje w przeciwieństwie do /etc/init.d/mysqld restartu - nie ma strasznej ilości gotowych skryptów, które to ułatwiają. Po opanowaniu staje się on starym kapeluszem i jest bardzo wygodnym sposobem na rozłożenie instancji, na przykład odzyskiwania, opóźnionej replikacji - cokolwiek.
cienkie
3

W systemie Debian 8 możesz użyć mechanizmu Systemd: nie potrzebujesz już więcej mysqld_multi.

UWAGA: używam wersji MariaDB! Nie jestem pewien, czy działa z „klasycznym” pakietem MySQL.

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

Wersja mariadb z wieloma instancjami. Bo jeśli uruchomisz wiele wersji jednocześnie. Używany również do mariadb @ bootstrap do bootstrap Galera.

utwórz plik konfiguracyjny /etc/mysql/conf.d/ my {instancename} .cnf

zacznij jako systemctl start mariadb@{instancename}.server

/etc/mysql/conf.d/myserver2.cnfUtwórz plik i podaj w nim nowe pliki pid / socket / datadir i port sieciowy:

[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

EDYCJA: uważaj, aby pierwsza instancja MySQL nie czytała tego pliku konfiguracyjnego, !includedir /etc/mysql/conf.d/*na dole /etc/mysql/my.cnf. Jeśli tak jest, zamień na !includedirz !includekażdego pliku konfiguracyjnego INNEGO niż myserver2.cnf:

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

Oficjalny dokument MySQL wskazuje, że musisz nazwać [mysqld]jako [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ), ale to nie działa z MariaDB . Więc po prostu pozwól [mysqld].

Przed uruchomieniem nowego demona nie zapomnij utworzyć datadir i potrzebnych plików:

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

Załaduj także ponownie konfigurację demona systemd:

systemctl daemon-reload

A jeśli chcesz uruchomić tego demona podczas rozruchu:

systemctl enable mariadb@server2

Aby rozpocząć:

service mariadb@server2 start
Najgorszy
źródło
Główny (nieinstancyjny) mysql czyta /etc/my.cnf, dlatego.
Michael Hampton
Zredagowałem swoją odpowiedź: w rzeczywistości wygląda na to, że pierwsza instancja odczytała plik server2.cnf za pomocą !includedir /etc/mysql/conf.d/*. Dla większego bezpieczeństwa umieściłem każdy conf.dplik ręcznie
Najgorszy