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.