MariaDB Master / Slave System aufsetzen

Die meisten von euch haben schon einmal ein LAMP Stack aufgesetzt – dieser beinhaltet meistens auch Mysql oder MariaDB – möchte man aber nun ein Backup der DB haben, sollte man über die Option eines Slaves neben der Hauptinstanz haben. Für private Projekte sicher „too much“, aber es einmal aufgesetzt zu haben schadet sicher nicht – um zu wissen was der Hoster da eigentlich macht und was es zu beachten gibt…

MariaDB installieren

Als erstes installieren wir uns MariaDB auf beiden Systemen (Mysql ist auch i.O. – ist aber nicht so performant wie MariaDB)

sudo apt-get update
sudo apt-get mariadb-server mariadb-client

Danach das übliche

mysql_secure_installation

mehr Infos dazu HIER

Verbindung testen

Legen wir in der /etc/hosts noch einen Eintrag für beide DB Server an:

sudo nano /etc/hosts

###Datenbank Replica Setup###
192.168.2.2 master
192.168.2.3 slave

Testen wir noch die Verbindung:

ping -c2 master
ping -c2 slave

Wichtig: Solltet Ihr schon beide Server haben oder euer Master hat schon Daten, dumped euch die DB vorher und importiert Sie in euren SLAVE.

 

mysqldump meinedatenbank | ssh slave@192.168.2.3 mysql meinedatenbank

 

Master konfigurieren

Wir fügen der mysql Config Datei nun noch einige Einstellungen hinzu

sudo nano /etc/mysql/my.cnf
[mysqld]
bind-address = 192.168.2.6
server-id = 1
log_bin = 1



log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index

Wir binden hier unsere IP Adresse des Masters – setzen eine UNIQUE Server Id sowie aktivieren das binary logging (und dessen Pfade)

Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging

Sollte dieser Fehler auftreten müsst Ihr noch folgenden hinzufügen:

binlog_format=row

Starten wir unseren Server neu sudo service mysql restart und loggen uns in die Console ein

mysql -u root -p

und dort setzen wir unseren SLAVE User

grant replication slave on *.* TO {benutzername}@'{ip_vom_slave}' identified by '{passwort}';
FLUSH PRIVILEGES;

Wichtig: Ersetzt alle Werte in den geschweiften Klammern!

Bleiben wir auch gleich in der Console und schauen uns den Status des Masters an: SHOW MASTER STATUS;

Macht euch davon einen Screenshot oder schreibt euch die Position und File auf – die brauchen wir später.

Slave konfigurieren

sudo nano /etc/mysql/my.cnf
bind-address = 192.168.2.3
server-id = 2

mit Ctrl+o speichern und Ctrl+x schließen und den Mysql Service neustarten und einloggen

sudo service mysql restart
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='192.168.2.6', MASTER_USER='slave', MASTER_PASSWORD='{passwort}', MASTER_LOG_FILE='mariadb-bin.000004', MASTER_LOG_POS=13242;
SLAVE START;
SHOW SLAVE STATUS\G

Bei mir hat das beim ersten Versuch nicht geklappt – falls Ihr einen Error habt der so aussieht:

Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

dann müsst Ihr folgendes tun.

SLAVE

stop slave;

MASTER

flush logs; show master status;  (notiert euch die Daten)

SLAVE

CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.00000X', MASTER_LOG_POS=106;
start slave;

 

Wofür das ganze eigentlich? Naja, ich wollte das immer schon einmal aufsetzen, rein aus Interesse und zusätzlich möchte ich vorab eine neue Funktion der Shopware Enterprise Version testen (DB Replicas). Schön das sowas nun auch Applikationsseitig gelöst wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.