Website-Suche

So richten Sie die MariaDB-Replikation (Master-Slave) in CentOS/RHEL 7 und Debian 8/9 ein


Auch wenn manche IT-Leute den Begriff „Datenbankreplikation hören, assoziieren sie ihn oft mit der Notwendigkeit, mehrere Kopien derselben Informationen zu haben, um Datenverlust im Falle eines Hardwareausfalls oder einer Datenbeschädigung zu vermeiden. Auch wenn dies bis zu einem gewissen Grad zutrifft, geht es bei der Datenbankreplikation um viel mehr als nur um das gängige Konzept der Sicherung einer Datenbank und der Datenverfügbarkeit.

Zu den weiteren Vorteilen der Datenbankreplikation in einem Master-Slave-Setup zählen:

  1. Sicherungen können auf dem Slave-Server durchgeführt werden, ohne die Schreibvorgänge im Master zu beeinträchtigen (und von diesen beeinflusst zu werden).
  2. Ressourcenintensive Operationen (z. B. Datenanalyse) können auf dem Slave durchgeführt werden, ohne die Leistung des Masters zu beeinträchtigen.

In diesem Artikel erklären wir, wie Sie die Master-Slave-Replikation in MariaDB 10.1 einrichten. Im Gegensatz zur klassischen Replikation hat MariaDB in v10.0 das Konzept der Global Transaction IDs (GTIDs) eingeführt, das den Wechsel eines Slaves zu ermöglicht Einfache Verbindung zu und Replikation von einem anderen Master. Darüber hinaus wird der Status des Slaves absturzsicher aufgezeichnet (Aktualisierungen des Status erfolgen in derselben Transaktion wie die Aktualisierungen der Daten).

Wenn Sie nach einer MySQL-Replikation unter CentOS/RHEL 6 suchen, befolgen Sie diese Anleitung zum Einrichten der MySQL-Replikation (Master-Slave) unter CentOS/RHEL 6

Installation von MariaDB 10.1 in CentOS/RHEL 7 und Debian 8/9

Unsere Testumgebung besteht aus den folgenden Maschinen (beide sind CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Um die neueste Version von MariaDB zu installieren, müssen wir ihre Repositorys zu unseren Servern hinzufügen. Wenn Sie eine ältere Version von MariaDB verwenden, beispielsweise 5.5, sollten Sie anhand des folgenden Artikels ein Upgrade auf die neueste Version 10.1 in Betracht ziehen.

  1. Aktualisieren Sie MariaDB 5.5 auf MariaDB 10.1

In CentOS/RHEL

Erstellen Sie eine Datei mit dem Namen MariaDB.repo in /etc/yum.repos.d mit den folgenden Inhalten sowohl auf Master als auch auf Slave< Systeme:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Speichern Sie die Datei und installieren Sie MariaDB auf beiden Servern mit yum:

yum update && yum install MariaDB-server MariaDB-client

In Debian/Ubuntu

Fügen Sie den Schlüssel zur Authentifizierung von Paketen und dem MariaDB-Repository hinzu:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Hinweis: Ersetzen Sie Name und Codename der Distribution in der oben hervorgehobenen Zeile.

Installieren Sie mit dem Befehl apt-get:

apt-get update
apt-get install mariadb-server

Sobald Sie MariaDB installiert haben, führen Sie die Prozedur mysql_secure_installation sowohl auf dem Master als auch auf dem Slave aus. Lassen Sie uns eine Beispieltestdatenbank auf dem Master-Computer einrichten.

Einrichten einer Beispiel-MySQL-Datenbank auf dem Master

Wir werden nun auf dem Master-Server die Employees-Datenbank von https://github.com/datacharmer/test_db einrichten (die einen Datensatz von 4 bereitstellt). (strong> Millionen Datensätze verteilt auf sechs Tabellen) in zwei einfachen Schritten:

Klonen Sie das Repository und importieren Sie damit die Beispieldatenbank in Ihre MariaDB-Installation:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Konfigurieren des MySQL-Servers auf dem Master

Um den Master zu konfigurieren, gehen Sie folgendermaßen vor:

SCHRITT 1: Bearbeiten Sie die Datei /etc/my.cnf. Fügen Sie im Abschnitt [mysqld] die folgenden vier Zeilen hinzu:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

und MariaDB neu starten:

systemctl restart mariadb

SCHRITT 2: Melden Sie sich als Root beim MariaDB-Server an, erstellen Sie den Benutzer-Slave und weisen Sie die erforderlichen Berechtigungen zu:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

Der letzte Befehl (SHOW MASTER STATUS) gibt die aktuelle Position im Binärprotokoll zurück (die genauen Koordinaten, die genau angeben, an welchem Punkt der Slave mit der Replikation beginnen soll:

SCHRITT 3: Verlassen Sie die MariaDB-Eingabeaufforderung (mit exit;) und verwenden Sie den folgenden Befehl, um einen Snapshot der Mitarbeiterdatenbank zu erstellen. Wenn Sie die Eingabetaste drücken, werden Sie aufgefordert, das Passwort für Root einzugeben, das Sie zuvor über mysql_secure_installation eingerichtet haben:

mysqldump -u root -p employees > employees-dump.sql

Stellen Sie nach Abschluss des Dumps erneut eine Verbindung zum Datenbankserver her, um die Tabellen zu entsperren, und beenden Sie den Vorgang:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

SCHRITT 4: Kopieren Sie den Dump auf den Slave:

scp employees-dump.sql [email :/root/ 

SCHRITT 5: Führen Sie die mysql_upgrade-Prozedur aus, um die Systemtabellen zu aktualisieren (Sie werden aufgefordert, das MariaDB-Root-Passwort einzugeben):

mysql_upgrade -u root -p

SCHRITT 6: Datenbankdienst durch die Firewall zulassen:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Jetzt konfigurieren wir den Slave.

Konfigurieren des MySQL-Servers auf dem Slave

Um den Slave zu konfigurieren, gehen Sie folgendermaßen vor:

SCHRITT 1: Erstellen Sie das Konto, um die Replikationsaufgaben auszuführen. Stellen Sie eine Verbindung zum lokalen MariaDB-Server her mit:

mysql -u root –p

und geben Sie das zuvor eingerichtete Passwort ein.

SCHRITT 2: Sobald Sie mit dem Datenbankserver verbunden sind, erstellen Sie den Benutzer und eine leere Datenbank und erteilen Sie Berechtigungen:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

SCHRITT 3: Verlassen Sie die MariaDB-Eingabeaufforderung und laden Sie den auf dem Masterserver erstellten Dump:

mysql -u root -p employees < employees-dump.sql

SCHRITT 4: Bearbeiten Sie die Datei /etc/my.cnf, um dem Slave unter [mysqld]< eine Server-ID zuzuweisen Abschnitt. Beachten Sie, dass es sich um eine andere Ganzzahl als 1 handeln muss, da wir im Master 1 verwendet haben:

server_id=2
replicate-do-db=employees

Starten Sie den Datenbankserver neu:

systemctl restart mariadb

SCHRITT 5: Führen Sie die mysql_upgrade-Prozedur aus, um die Systemtabellen zu aktualisieren (Sie werden aufgefordert, das MariaDB-Root-Passwort einzugeben):

mysql_upgrade -u root -p

SCHRITT 6: Sobald der Dump auf den Slave importiert wurde, sind es nur noch wenige Schritte, um mit der Replikation zu beginnen. Melden Sie sich bei der Datenbank an und führen Sie die folgenden Befehle in der MariaDB-Eingabeaufforderung aus. Achten Sie besonders auf die Variablen MASTER_LOG_FILE und MASTER_LOG_POS, die mit den Werten übereinstimmen sollten, die von SHOW MASTER STATUS in SCHRITT 2 von „Konfigurieren des Masters“ zurückgegeben wurden. über.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

SCHRITT 7: Starten Sie den Slave und überprüfen Sie seinen Status, ohne die MariaDB-Eingabeaufforderung zu verlassen:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Nicht, dass Sie das jetzt brauchen, aber beachten Sie, dass Sie den Slave stoppen können mit:

MariaDB [(none)]> STOP SLAVE;

wenn der Befehl SHOW SLAVE STATUS\G; Fehler zurückgibt. Verwenden Sie diese Fehler zur Fehlerbehebung und führen Sie dann START SLAVE; aus, um den Test erneut durchzuführen.

Testen Sie die MySQL/MariaDB-Datenbankreplikation

Fügen wir der Tabelle employees im Master-Server einen Datensatz hinzu:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Überprüfen Sie dann, ob diese Änderung im Slave repliziert wurde:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Wie Sie sehen, funktioniert die Replikation vom Master zum Slave ordnungsgemäß.

Zusammenfassung

In diesem Artikel haben wir erklärt, wie Sie die neueste Version von MariaDB in CentOS/RHEL 7 und Debian 8/9 installieren und wie Sie die Master-Slave-Replikation mit GTIDs einrichten. Weitere Informationen finden Sie im MariaDB-Replikationshandbuch. Wenn Sie Fragen oder Kommentare haben, können Sie uns jederzeit über das untenstehende Formular kontaktieren.