Auch wenn manche IT-Mitarbeiter den Ausdruck „Datenbankreplikation“ hören “, verbinden sie es oft mit der Notwendigkeit, mehrere Kopien derselben Informationen zu haben, um Datenverluste im Falle eines Hardwareausfalls oder einer Datenbeschädigung zu vermeiden. Das stimmt zwar bis zu einem gewissen Grad, aber zur Datenbankreplikation gehört viel mehr als das allgemeine Konzept der Sicherung einer Datenbank und der Datenverfügbarkeit.
Unter anderen Vorteilen der Datenbankreplikation in einer Master-Slave-Konfiguration können wir erwähnen:
- Backups können auf dem Slave-Server durchgeführt werden, ohne die Schreiboperationen im Master zu beeinflussen (und von ihnen beeinflusst zu werden).
- Ressourcenintensive Operationen (z. B. Datenanalyse) können auf dem Slave durchgeführt werden, ohne die Leistung des Masters zu beeinflussen.
In diesem Artikel erklären wir, wie Sie die Master-Slave-Replikation in MariaDB 10.1 einrichten . Im Gegensatz zur klassischen Replikation führte MariaDB das Konzept der globalen Transaktions-IDs ein (GTIDs ) in v10.0 , wodurch ein Slave geändert werden kann, um sich einfach mit einem anderen Master zu verbinden und von diesem zu replizieren. Darüber hinaus wird der Zustand des Slaves absturzsicher aufgezeichnet (Aktualisierungen des Zustands erfolgen in derselben Transaktion wie die Aktualisierungen der Daten).
Wenn Sie nach MySQL suchen Replikation unter CentOS/RHEL 6 , folgen Sie dieser Anleitung MySQL (Master-Slave)-Replikation auf CentOS/RHEL 6 einrichten
Installieren 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, z. B. 5.5, verwenden, ziehen Sie ein Upgrade auf die neueste Version 10.1 in Betracht, indem Sie den folgenden Artikel verwenden.
- Aktualisieren Sie MariaDB 5.5 auf MariaDB 10.1
In CentOS/RHEL
Erstellen Sie eine Datei namens MariaDB.repo
in /etc/yum.repos.d mit folgendem Inhalt auf beiden Master und Sklave 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 hinzu, um Pakete und das MariaDB-Repository zu authentifizieren:
# 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 :Distribution name ersetzen und Codename in der oben hervorgehobenen Zeile.
Installieren Sie mit apt-get Befehl:
# apt-get update # apt-get install mariadb-server
Führen Sie nach der Installation von MariaDB die mysql_secure_installation
aus Verfahren sowohl auf dem Master als auch auf dem Slave, richten wir eine Beispieltestdatenbank auf dem Master-Rechner ein.
Einrichten einer MySQL-Beispieldatenbank auf Master
Wir werden nun im Masterserver die Employees
einrichten Datenbank von https://github.com/datacharmer/test_db (was einen Datensatz von 4 bereitstellt Millionen Datensätze verteilt auf sechs Tabellen) in zwei einfachen Schritten:
Klonen Sie das Repository und verwenden Sie es, um die Beispieldatenbank in Ihre MariaDB-Installation zu importieren:
# git clone https://github.com/datacharmer/test_db # cd test_db # mysql < employees.sql
MySQL-Server auf Master konfigurieren
Gehen Sie folgendermaßen vor, um den Master zu konfigurieren:
SCHRITT 1: Bearbeiten Sie /etc/my.cnf
Datei. Unter [mysqld]
Abschnitt, fügen Sie die folgenden vier Zeilen hinzu:
log-bin server_id=1 replicate-do-db=employees bind-address=192.168.0.18
und starten Sie MariaDB neu:
# 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 (MASTERSTATUS ANZEIGEN ) gibt die aktuelle Position im Binärlog 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 Enter 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 dann:
MariaDB [(none)]> UNLOCK TABLES; MariaDB [(none)]> exit;
SCHRITT 4: Kopieren Sie den Dump auf den Slave:
# scp employees-dump.sql [email protected]:/root/
SCHRITT 5: Führen Sie mysql_upgrade
aus Vorgehensweise zum Aktualisieren der Systemtabellen (Sie werden aufgefordert, das MariaDB-Root-Passwort einzugeben):
# mysql_upgrade -u root -p
SCHRITT 6: Lassen Sie den Datenbankdienst durch die Firewall zu:
# firewall-cmd --add-service=mysql # firewall-cmd --add-service=mysql --permanent # firewall-cmd --reload
Lassen Sie uns nun den Slave konfigurieren.
MySQL-Server auf Slave konfigurieren
Um den Slave zu konfigurieren, gehen Sie folgendermaßen vor:
SCHRITT 1: Erstellen Sie das Konto, um die Replikationsaufgaben auszuführen. Verbinden Sie sich mit dem lokalen MariaDB-Server 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 Master-Server erstellten Dump:
# mysql -u root -p employees < employees-dump.sql
SCHRITT 4: Bearbeiten Sie /etc/my.cnf
Datei, um eine Server-ID zuzuweisen an den Slave unter [mysqld]
Sektion. Beachten Sie, dass es sich um eine andere ganze Zahl als 1 handeln muss , da wir 1 verwendet haben im Master:
server_id=2 replicate-do-db=employees
Starten Sie den Datenbankserver neu:
# systemctl restart mariadb
SCHRITT 5: Führen Sie mysql_upgrade
aus Vorgehensweise zum Aktualisieren der Systemtabellen (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 MASTER_LOG_FILE
und MASTER_LOG_POS
Variablen, die mit den von SHOW MASTER STATUS zurückgegebenen Werten übereinstimmen sollten in SCHRITT 2 von „Konfigurieren des Masters“ oben.
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 SHOW SLAVE STATUS\G;
Befehl gibt alle Fehler zurück. Verwenden Sie diese Fehler zur Fehlerbehebung und führen Sie dann START SLAVE;
aus nochmal testen.
Testen Sie die MySQL/MariaDB-Datenbankreplikation
Fügen wir den Mitarbeitern einen Datensatz hinzu Tabelle im Masterserver:
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 können, funktioniert die Replikation vom Master zum Slave korrekt.
Zusammenfassung
In diesem Artikel haben wir erklärt, wie Sie die neueste Version von MariaDB in CentOS/RHEL 7 installieren und Debian 8/9 und diskutierten, wie man eine Master-Slave-Replikation mit GTIDs einrichtet. Weitere Informationen finden Sie im MariaDB Replication Guide, und zögern Sie nicht, uns über das unten stehende Formular zu kontaktieren, wenn Sie Fragen oder Kommentare haben.