MariaDB Replikation
MariaDB absichern und Replikation einrichten
Dieses Skript beschreibt, wie du zwei MariaDB-Server absicherst und eine einfache Master-Slave-Replikation einrichtest. Dabei kannst du auf dem Master-Server Daten schreiben und ändern, die automatisch auf den Slave-Server übertragen werden. Das erhöht Datensicherheit und Verfügbarkeit, da der Slave-Server für Backups oder Lastverteilung (nur lesend) verwendet werden kann.
Der Ablauf umfasst:
- Grundlegende Absicherung der MariaDB-Installation auf beiden Servern
- Vorbereitung und Konfiguration des Master-Servers
- Erstellung eines speziellen Benutzers für die Replikation
- Einrichtung und Aktivierung der Replikation auf dem Slave-Server
- Überprüfung der korrekten Funktion durch eine Testdatenbank
Voraussetzungen
- Master-Server (MariaDB): 192.168.178.128
- Slave-Server (MariaDB): 192.168.178.129
- Beide Systeme sind frisch installiert und erreichbar.
- Root-Zugriff auf beiden Systemen vorhanden.
MariaDB absichern
Auf beiden Servern
- Fragen bei mysql_secure_installation beantworten
Im folgenden Beispiel sind alle Antworten für eine sichere MariaDB-Installation geeignet:
- Enter current password for root (enter for none): [dein aktuelles Passwort oder Enter, falls keines gesetzt]
- Switch to unix_socket authentication [Y/n]: n
- Change the root password? [Y/n]: n
- Remove anonymous users? [Y/n]: Y
- Disallow root login remotely? [Y/n]: Y
- Remove test database and access to it? [Y/n]: Y
- Reload privilege tables now? [Y/n]: Y
Zugriff von Slave auf Master erlauben (Master)
Verzeichnis erstellen
- mkdir -p /var/log/mysql
- chown -R mysql:mysql /var/log/mysql
Auf dem Master eine Konfigurationsdatei bearbeiten:
- vi /etc/mysql/mariadb.conf.d/50-server.cnf
Folgende Zeilen unter [mysqld] eintragen:
bind-address = 192.168.178.128 server-id = 1 log_bin = /var/log/mysql/mariadb-bin.log binlog_format = ROW
Danach MariaDB neu starten:
- systemctl restart mariadb
Benutzer für die Replikation erstellen (Master)
Auf Master als root einloggen:
- mysql -u root -p
Replikationsbenutzer anlegen (Passwort anpassen):
- CREATE USER 'repl'@'192.168.178.129' IDENTIFIED BY 'sicheres_passwort';
- GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.178.129';
- FLUSH PRIVILEGES;
Aktuelle binäre Log-Position ermitteln:
- SHOW MASTER STATUS;
Notiere File und Position.
+--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mariadb-bin.000001 | 805 | | | +--------------------+----------+--------------+------------------+ 1 row in set (0.000 sec)
Slave vorbereiten
Verzeichnis erstellen:
- mkdir -p /var/log/mysql
- chown -R mysql:mysql /var/log/mysql
Konfigurationsdatei auf Slave bearbeiten:
- vi /etc/mysql/mariadb.conf.d/50-server.cnf
Unter [mysqld] eintragen:
bind-address = 192.168.178.129 server-id = 2 relay-log = /var/log/mysql/mariadb-relay-bin.log log_bin = /var/log/mysql/mariadb-bin.log binlog_format = ROW
Danach MariaDB neu starten:
- systemctl restart mariadb
Replikation auf Slave aktivieren
Auf Slave-Server als root einloggen:
- mysql -u root -p
Folgendes Kommando ausführen (File, Position und Passwort entsprechend anpassen):
- CHANGE MASTER TO MASTER_HOST='192.168.178.128', MASTER_USER='repl', MASTER_PASSWORD='sicheres_passwort', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=805;
Replikation starten:
- START SLAVE;
Status überprüfen
Replikationsstatus kontrollieren:
- SHOW SLAVE STATUS\G
Folgende Einträge sollten geprüft werden:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
Test der Replikation
Auf dem Master-Server eine Test-Datenbank erstellen:
- mysql -u root -p
- CREATE DATABASE replikationstest;
Auf dem Slave-Server kontrollieren, ob die Datenbank angekommen ist:
- mysql -u root -p
- SHOW DATABASES;
Die Datenbank replikationstest sollte sichtbar sein.
Nützliche Befehle zur Kontrolle der Replikation
Auf dem Slave-Server
- Status der Replikation anzeigen
- SHOW SLAVE STATUS\G
- Nur den wichtigsten Teil prüfen
- SELECT @@slave_io_running, @@slave_sql_running;
- Slave stoppen (z. B. für Wartung)
- STOP SLAVE;
- Slave wieder starten
- START SLAVE;
- Logs zur Replikation anzeigen (ab MariaDB 10.5)
- SHOW REPLICA STATUS\G
Auf dem Master-Server
- Aktuellen Binlog-Status anzeigen
- SHOW MASTER STATUS;
- Welche Benutzer verbunden sind (inkl. Replikation)
- SHOW PROCESSLIST;
- Alle aktiven Binlog-Dateien anzeigen
- SHOW BINARY LOGS;
Allgemein hilfreich
- Konfiguration überprüfen
- SHOW VARIABLES LIKE 'server_id';
- SHOW VARIABLES LIKE 'log_bin%';
- Fehlerprotokoll prüfen (Systemlog)
- journalctl -u mariadb.service
- Letzte 20 Zeilen des Error-Logs
- tail -n 20 /var/log/mysql/error.log