Es ist ein Prozess, doppelte Versionen einer DB zu erstellen. Der Replikationsprozess kopiert nicht nur eine Datenbank, sondern synchronisiert auch Änderungen vom Master zu einem der Slaves. Dies bedeutet jedoch nicht, dass Slave-Datenbanken identische Kopien des Masters sind, da die Replikation so konfiguriert werden kann, dass nur ein Schema von Tabellen oder Spalten oder Zeilen repliziert wird, dh eine Teilreplikation. Die Replikation stellt sicher, dass diese spezifisch konfigurierten Objekte zwischen den verschiedenen Datenbanken synchron gehalten werden.
Mariadb-Replikationskonzepte
Sicherungen :Die Replikation kann für DB-Sicherungen verwendet werden. Zum Beispiel haben Sie Master -> Slave-Replikation. Wenn der Master verloren geht (z. B. Festplatte ausfällt), können Sie Ihre DB vom Master wiederherstellen.
Skalierung :Sie können die Master -> Slave-Replikation für die Skalierungslösung verwenden. Wenn Sie beispielsweise ein paar große und eine SQL-Abfrage haben, können Sie diese Abfragen mithilfe der Replkation für jeden Replikationsknoten trennen. Das Schreiben von SQL sollte nur auf dem Master ausgeführt werden, für Nur-Lese-Anfragen kann ein Slave-Server verwendet werden.
Auftragslösung :Sie können die Replikation für die Verteilung verwenden. Beispielsweise können Sie unterschiedliche Verkaufsdaten auf unterschiedliche Datenbanken verteilen.
Failover-Lösung :Zum Beispiel haben Sie Master -> Slave (1) -> Slave (2) -> Slave (3) Replikation. Sie können ein Skript für die Master-Überwachung schreiben, wenn der Master ausfällt, kann das Skript schnell Slave(1) neu für Master ändern -> Slave(1) -> Slave(2) und Ihre Anwendung wird ohne Ausfallzeit weiterarbeiten
Einfache schematische Demonstration der Replikation
Bevor Sie beginnen, sollten Sie wissen, was Binärlog und Ibdata1 sind. Das binäre Protokoll enthält eine Aufzeichnung über alle Änderungen in der Datenbank, den Daten und der Struktur sowie darüber, wie lange die Ausführung jeder Anweisung gedauert hat. Das Bin-Log besteht aus festgelegten Log-Dateien und einem Index. Dies bedeutet, dass wichtige SQL-Anweisungen wie CREATE, ALTER, INSERT, UPDATE und DELETE in dieses Protokoll geschrieben werden, Anweisungen wie SELECT werden nicht protokolliert. Diese Informationen können in der allgemeinen query.log-Datei protokolliert werden. In einfachen Ibdata1 ist eine Datei, die alle Tabellen und alle Informationen über db enthält.
Master-Server-Konfiguration
Gut, dass der Server aktualisiert wurde
sudo yum install update -y && sudo yum install upgrade -y
Wir arbeiten an Centos 7 Server
sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
Installieren Sie MariaDB
sudo yum install mariadb-server -y
Starten Sie MariaDB und aktivieren Sie es so, dass es beim Booten des Servers gestartet wird
sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service
Ausgabe:
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
Überprüfen Sie den MariaDB-Status
sudo service mariadb status
oder verwenden Sie
sudo systemctl is-active mariadb.service
Ausgabe:
Redirecting to /bin/systemctl status mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)
MariaDB-Passwort festlegen
mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit
SOME_ROOT_PASSWORD - Ihr Root-Passwort. In meinem Fall verwende ich "q" - Passwort, dann versuche mich anzumelden:
sudo mysql -u root -pSOME_ROOT_PASSWORD
Ausgabe:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.
Geben Sie „Hilfe“ ein; oder '\h' für Hilfe. Geben Sie '\c' ein, um die aktuelle Eingabeanweisung zu löschen.
Lassen Sie uns eine Datenbank mit einer Tabelle mit einigen Daten erstellen
Datenbank/Schema erstellen
sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;
Wo:
test_repl - Name of shcema which will be replicated
Ausgabe:
Query OK, 1 row affected (0.00 sec)
Personentabelle erstellen
mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Ausgabe:
mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)
Fügen Sie einige Daten ein
mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");
Ausgabe:
Query OK, 5 row affected (0.00 sec)
Daten prüfen
mysql> select * from Persons;
Ausgabe:
+----------+-----------+------------+----------+-------+
| PersonID | LastName | FirstName | Address | City |
+----------+-----------+------------+----------+-------+
| 1 | LastName1 | FirstName1 | Address1 | City1 |
| 1 | LastName1 | FirstName1 | Address1 | City1 |
| 2 | LastName2 | FirstName2 | Address2 | City2 |
| 3 | LastName3 | FirstName3 | Address3 | City3 |
| 4 | LastName4 | FirstName4 | Address4 | City4 |
| 5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+
MariaDB für die Replikation konfigurieren
Sie müssen die Datei my.cnf auf dem Master-Server bearbeiten, um die binäre Protokollierung zu aktivieren und die ID des Servers festzulegen. Ich werde den vi-Texteditor verwenden, aber Sie können jeden für Sie geeigneten verwenden, z. B. nano, joe usw.
sudo vi /etc/my.cnf
und setzen Sie solche Zeilen in die Konfiguration im [mysqld]-Abschnitt.
log-basename=master
log-bin
binlog-format=row
server_id=1
Ausgabe:
Starten Sie dann MariaDB neu:
sudo service mariadb restart
Melden Sie sich bei MariaDB an und überprüfen Sie die Binärprotokolle:
sudo mysql -u root -pq test_repl
mysql> SHOW MASTER STATUS;
Ausgabe:
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 3913 | | |
+--------------------+----------+--------------+------------------+
Denken Sie daran: Werte "Datei" und "Position". SIE BRAUCHEN DIESEN WERT AUF DEM SLAVE SERVER
Benutzer für die Replikation erstellen
mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;
Ausgabe:
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Überprüfen Sie den Benutzer in der Datenbank
mysql> select * from mysql.user WHERE user="replication_user"\G;
Ausgabe:
mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....
Erstellen Sie einen DB-Dump (Momentaufnahme aller Daten, die repliziert werden) vom Master
mysqldump -uroot -pSOME_ROOT_PASSWORD test_repl > full-dump.sql
Wo:
SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;
Sie müssen den MySQL-Dump (full-dump.sql) auf dem Slave-Server wiederherstellen. Es wird für die Replikation benötigt.
Slave-Server-Konfiguration
All diese Befehle müssen Sie auf dem Slave-Server ausführen
Nehmen wir an, wir haben einen frischen/aktualisierten CentOS 7.x-Server mit dem neuesten MariaDB-Server und Sie können sich als Root beim MariaDB-Server anmelden (dies wurde im ersten Teil des Artikels beschrieben)
Melden Sie sich bei der Maria DB-Konsole an und erstellen Sie eine DB
mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;
Daten vom Master auf Slave-Server wiederherstellen
mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql
Wo:
full-dump.sql - its DB Dump that you have create at test server.
Melden Sie sich bei Maria DB an und richten Sie die Replikation ein
mysql> CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;
Wo:
MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master
Slave-Modus starten
mysql> slave start;
Ausgabe:
Query OK, 0 rows affected (0.00 sec)
Slave-Status prüfen
mysql> show slave status\G;
Ausgabe:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4175
Relay_Log_Space: 1089
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
Bei diesem Schritt sollte alles in Ordnung sein und es sollten keine Fehler hier sein.
Testen Sie die Replikation
Fügen Sie auf dem MAIN/MASTER-Server einige Entitäten zu DB hinzu
mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");
Gehen Sie dann zum SLAVE-Server und überprüfen Sie die replizierten Daten
mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName | FirstName | Address | City |
+----------+-----------+------------+----------+-------+
...................
| 6 | LastName6 | FirstName6 | Address6 | City6 |
| 7 | LastName7 | FirstName7 | Address7 | City7 |
| 8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+
Sie können sehen, dass die Daten auf den Slave-Server repliziert werden. Das bedeutet, dass die Replikation funktioniert. Ich hoffe, Ihnen hat der Artikel gefallen. Lassen Sie uns wissen, wenn Sie Fragen haben.