GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So konfigurieren Sie die MariaDB-Replikation unter CentOS Linux

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.


Cent OS
  1. So konfigurieren Sie LVM unter Linux / CentOS / Redhat

  2. So konfigurieren Sie das YUM-Repository in Linux/Centos/Redhat | YUM unter Linux/Centos/Redhat

  3. So installieren und konfigurieren Sie Docker in Rocky Linux/Centos 8

  4. So installieren und konfigurieren Sie Redis 6 unter Rocky Linux/Centos 8

  5. So installieren und konfigurieren Sie Ansible unter Rocky Linux/CentOS 8

So installieren und konfigurieren Sie Nextcloud unter CentOS 7 / RHEL 7

So installieren und konfigurieren Sie Denyhost in Centos 7 Linux

So installieren und konfigurieren Sie Cacti unter CentOS 7

So konfigurieren Sie die FreeIPA-Replikation unter Rocky Linux/Alma Linux/Centos 8

So installieren Sie LAMP (Linux Apache, MariaDB, PHP) unter CentOS 7

So konfigurieren Sie die PostgreSQL 12-Streaming-Replikation in CentOS 8