MariaDB Replikation

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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