MySQL Serie 13 MySQL-Replikation

MySQL Serie 13 MySQL-Replikation

1. Mit der MySQL-Replikation verbundene Konzepte

  • Master-Slave-Replikation: Der Masterknoten synchronisiert Daten mit mehreren Slaveknoten
  • Kaskadierende Replikation: Der Masterknoten synchronisiert Daten mit einem Slaveknoten, und andere Slaveknoten replizieren Daten auf den Slaveknoten.
  • Synchrone Replikation: Die Replikationsstrategie, bei der Daten erst dann an den Benutzer zurückgegeben werden, wenn alle Daten vom Masterknoten mit dem Slaveknoten synchronisiert wurden, wird als synchrone Replikation bezeichnet.
  • Asynchrone Replikation: Sobald die Daten auf den primären Knoten geschrieben wurden, werden sie sofort an den Benutzer zurückgegeben, um die Synchronisierung abzuschließen
  • Trennung von Lesen und Schreiben: Fügen Sie am Frontend einen Scheduler hinzu, um Anweisungen zum Ändern von Daten und Anweisungen zum Abfragen von Daten separat zu planen, Schreibvorgänge für den Masterknoten und Lesevorgänge für den Slaveknoten zu planen.

Masterknoten:

  • Dump-Thread: Starten Sie einen Dump-Thread für jeden Slave-E/A-Thread, um Binärprotokollereignisse an ihn zu senden.

Vom Knoten:

  • I/O-Thread: Fordert binäre Log-Ereignisse vom Master an und speichert diese im Relay-Log
  • SQL-Thread: Liest Log-Ereignisse aus dem Relay-Log und spielt sie lokal ab

Mit der Kopierfunktion in Zusammenhang stehende Dateien:

  • master.info: Wird verwendet, um relevante Informationen zu speichern, wenn der Slave eine Verbindung zum Master herstellt, wie z. B. Konto, Passwort, Serveradresse usw.
  • relay-log.info: speichert die Korrespondenz zwischen dem aktuellen Binärprotokoll, das auf den aktuellen Slave-Knoten kopiert wurde, und dem lokalen Wiedergabeprotokoll

Kopieren Sie das Schema:

  • Ein Master und ein Slave
  • Ein Herr, viele Sklaven
  • Master-Master-Replikation
  • Zirkuläre Replikation
  • Kaskadierende Replikation
  • Mehrere Master und ein Slave

Zu den gängigen Architekturen gehören Master-Slave-Architektur oder Kaskadenarchitektur

2. Einfache Implementierung einer One-Master-One-Slave-Architektur

1. Neue Datenbank erstellt Master-Slave-Architektur

​1) Hauptserverkonfiguration

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ZEILE
    log-basename=master1
    server_id=1
~]# systemctl MariaDB neu starten
~]#mysql
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO testuser@'192.168.0.8' IDENTIFIED BY 'testpass'; #Synchronisierungskonto autorisieren MariaDB [(keine)]> SHOW MASTER LOGS;
+--------------------+-----------+
| Protokollname | Dateigröße |
+--------------------+-----------+
| master1-bin.000001 | 26756 |
| master1-bin.000002 | 921736 |
| master1-bin.000003 | 401 | #Diesen Standort aufzeichnen und mit der Synchronisierung vom Server beginnen +--------------------+-----------+

2) Aus der Serverkonfiguration

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2 #eindeutige Server-ID relay_log=Relay-Log
    relay_log_index=Relay-Log.index
    schreibgeschützt = EIN
~]# systemctl MariaDB neu starten
~]#mysql
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7', #Geben Sie die IP des Masterknotens an
    -> MASTER_USER='testuser', #Benutzername des Synchronisationsbenutzers-> MASTER_PASSWORD='testpass', #Passwort-> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master1-bin.000003', #Oben aufgezeichnete Datei-> MASTER_LOG_POS=401, #Position-> MASTER_CONNECT_RETRY=10; #Wiederholungszeit 10 SekundenMariaDB [(keine)]> START SLAVE; #Master-Slave-Replikation starten

3) Testen

Generieren Sie einige Daten auf dem Masterknoten:
MariaDB [(keine)]> DATENBANK ERSTELLEN testdb;
MariaDB [(keine)]> testdb verwenden
MariaDB [testdb]> Tabelle Testlog erstellen (ID int auto_increment Primärschlüssel, Name char(30), Alter int Standard 20);
MariaDB [testdb]> Trennzeichen $$
MariaDB [testdb]> Prozedur pro_testlog() erstellen
    -> beginnen
    -> deklariere i int;
    -> setze i = 1;
    -> solange i < 100000
    -> in Testlog(Name, Alter) Werte einfügen (concat('testuser',i),i);
    -> setze i = i +1; 
    -> Ende während;
    -> Ende$$
MariaDB [testdb]> Trennzeichen;
MariaDB [testdb]> TRANSAKTION STARTEN;
MariaDB [testdb]> CALL pro_testlog;
MariaDB [testdb]> COMMIT;
Überprüfen Sie den Synchronisierungsstatus auf dem Slave-Knoten:
MariaDB [(keine)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| ANZAHL(*) |
+----------+
| 99999 | #Synchronisierung erfolgreich+----------+
MariaDB [(keine)]> SLAVE-STATUS ANZEIGEN\G
*************************** 1. Reihe ****************************
               Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
                  Master_Host: 192.168.0.7
                  Master_User: Testbenutzer
                  Master_Port: 3306
                Verbindungswiederholung: 10
              Master_Log_File: master1-bin.000003
          Read_Master_Log_Pos: 10389814
               Relay-Log-Datei: relay-log.000002
                Relay_Log_Pos: 10389944
        Relay_Master_Log_File: master1-bin.000003
             Slave_IO_Running: Ja #IO-Thread wurde gestartet Slave_SQL_Running: Ja #SQL-Thread wurde gestartet Seconds_Behind_Master: 0 #Zeitunterschied zwischen Master- und Slave-Replikation Master_Server_Id: 1

2. Fügen Sie der alten Datenbank einen neuen Slave-Server hinzu

​1) Hauptserverkonfiguration

~]# vim /etc/my.cnf
    [mysqld]
    log_bin
    binlog_format=ZEILE
    log-basename=master1
    server_id=1
~]# systemctl MariaDB neu starten
~]# mysqldump -A -F --single-transaction --master-data=1 > full.sql
~]# scp full.sql [email protected]:/root/
~]# mysql -e 'GRANT REPLICATION SLAVE ON *.* TO testuser@'192.168.0.8' IDENTIFIZIERT DURCH 'testpass';'

2) Aus der Serverkonfiguration

~]# vim /etc/my.cnf
    [mysqld]
    server_id=2
    relay_log=Relay-Protokoll   
    relay_log_index=Relay-Log.index
    schreibgeschützt = EIN
~]# systemctl MariaDB neu starten
~]# vim full.sql #Fügen Sie der SQL-Sicherungsdatei die folgenden Informationen hinzu CHANGE MASTER TO
    MASTER_HOST='192.168.0.7',
    MASTER_USER='Testbenutzer',
    MASTER_PASSWORD='Testpass',
    MASTER_PORT=3306,
    MASTER_LOG_FILE='master1-bin.000005',
    MASTER_LOG_POS=245,
    MASTER_CONNECT_RETRY=10;
~]# mysql < full.sql #Konfiguration wurde beim Importieren von SQL MariaDB abgeschlossen [(keine)]> SELECT COUNT(*) FROM testdb.testlog;
+----------+
| ANZAHL(*) |
+----------+
| 99999 |
+----------+
MariaDB [(keine)]> START SLAVE; #Replikation starten

3. Implementierung einer kaskadierenden Replikationsarchitektur

1) Masterknoten

[root@master ~]# vim /etc/my.cnf
[mysqld]
log_bin
binlog_format=ZEILE
log-basename=master
server_id=1
[root@master ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+----------------------+----------+
| Protokollname | Dateigröße |
+----------------------+----------+
| master-bin.000001 | 26753 |
| master-bin.000002 | 921736 |
| master-bin.000003 | 401 |
+----------------------+----------+

2) Slave-Knoten

[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
log_bin #Beachten Sie, dass in der Kaskadenarchitektur der Relay-Slave-Knoten über die Binärprotokollfunktion binlog_format=ROW verfügen muss
schreibgeschützt = EIN
server_id=2
log_slave_updates #Dies ist der Schlüssel. Seine Funktion besteht darin, die Datenänderungen vom Dienst in der Binärprotokolldatei relay_log = relay-log aufzuzeichnen.
relay_log_index=Relay-Log.index
[root@slave1 ~]# systemctl starte mariadb
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=401,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+--------------------+-----------+
| Protokollname | Dateigröße |
+--------------------+-----------+
| mariadb-bin.000001 | 245 |
+--------------------+-----------+
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';

3) Slave-Knoten von Slave-Knoten

[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=3
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@slave2 ~]# systemctl starte mariadb
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;

4) Slave-Knoten 2 des Slave-Knotens

[root@slave3 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=4
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@slave3 ~]# systemctl starte mariadb
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mariadb-bin.000001',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;
Nachdem die kaskadierende Replikation nun erstellt wurde, testen wir sie.

4. Master-Master-Replikationsarchitektur

Mögliche Probleme: Dateninkonsistenz, daher mit Vorsicht verwenden; Wichtige Punkte, die zu beachten sind: Automatische Erhöhung der ID
Konfigurieren Sie einen Knoten für die Verwendung einer ungeraden ID
auto_increment_offset=1 Startpunkt
auto_increment_increment=2 Inkrementrate Ein anderer Knoten verwendet eine gerade ID
auto_increment_offset=2
auto_increment_increment=2

1) Hauptteil 1

[mysqld]
log_bin
binlog_format=ZEILE
log-basename=master1
server_id=1
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
auto_increment_offset=1 #Das selbstinkrementierende Feld beginnt bei 1 auto_increment_increment=2 #Jedes Mal um 2 erhöhen, d. h. das ID-Feld der vom Knoten Master1 geschriebenen Daten besteht ausschließlich aus ungeraden Zahlen [root@master ~]# systemctl start mariadb
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+--------------------+-----------+
| Protokollname | Dateigröße |
+--------------------+-----------+
| master1-bin.000001 | 27033 |
| master1-bin.000002 | 942126 |
| master1-bin.000003 | 245 |
+--------------------+-----------+
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master2-bin.000003',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;

2) Hauptteil 2

[mysqld]
log_bin
binlog_format=ZEILE
log-basename=master2
server_id=2
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
auto_increment_offset=2 #Das selbstinkrementierende Feld beginnt bei 1 auto_increment_increment=2 #Jedes Mal um 2 erhöhen, d. h. die ID-Felder der vom Knoten Master1 geschriebenen Daten sind alle gerade Zahlen [root@master2 ~]# systemctl start mariadb
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+--------------------+-----------+
| Protokollname | Dateigröße |
+--------------------+-----------+
| master2-bin.000001 | 27036 |
| master2-bin.000002 | 942126 |
| master2-bin.000003 | 245 |
+--------------------+-----------+
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master1-bin.000003',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;

3) Testen

Erstellen Sie eine Tabelle auf Master1 und fügen Sie Daten hinzu. MariaDB [(keine)]> CREATE DATABASE db1;
MariaDB [(keine)]> benutze db1
MariaDB [db1]> CREATE TABLE t1(id INT(2) AUTO_INCREMENT PRIMARY KEY,name CHAR(30));
MariaDB [db1]> INSERT t1(name) VALUES ('tom');
MariaDB [db1]> INSERT t1(name) VALUES ('maria'); 
MariaDB [db1]> AUSWÄHLEN * VON t1;
+----+--------+
| Ich würde | Name |
+----+--------+
| 1 | tom |
| 3 | maria |
+----+--------+
Daten zu master2MariaDB hinzufügen [db1]> INSERT t1(name) VALUES ('jerry');
MariaDB [db1]> INSERT t1(name) VALUES ('tony'); 
MariaDB [db1]> AUSWÄHLEN * VON t1;
+----+--------+
| Ich würde | Name |
+----+--------+
| 1 | tom |
| 3 | maria |
| 4 | Jerry |
| 6 | Tony |

5. Implementierung der halbsynchronen Replikation

Standardmäßig ist die Replikationsfunktion von MySQL asynchron, was die beste Leistung bieten kann. Die Master-Datenbank wird beendet, wenn sie das Binlog-Protokoll an die Slave-Datenbank sendet, und überprüft nicht, ob die Slave-Datenbank es empfangen hat. Dies bedeutet, dass bei einem Fehler auf dem Master- oder Slave-Server der Slave-Server das vom Master-Server gesendete Binlog-Protokoll möglicherweise nicht empfängt, was zu Dateninkonsistenzen zwischen dem Master- und dem Slave-Server und sogar zu Datenverlust während der Wiederherstellung führt. Der Mechanismus der halbsynchronen Replikation besteht darin, dass nur dann, wenn der Masterknoten und der Slave-Knoten synchronisiert sind, nur einer von ihnen die Synchronisierung abschließt und den Schreibabschluss zurückgibt. Dieser Mechanismus gewährleistet die Datensicherheit.

1) Masterknoten

[root@master ~]# vim /etc/my.cnf
[mysqld]
log_bin
binlog_format=ZEILE
log-basename=master
server_id=1
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@master ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+----------------------+----------+
| Protokollname | Dateigröße |
+----------------------+----------+
| master-bin.000001 | 26753 |
| master-bin.000002 | 921736 |
| master-bin.000003 | 401 |
+----------------------+----------+
MariaDB [(keine)]> PLUGIN INSTALLIEREN rpl_semi_sync_master SONAME 'semisync_master.so'; #Modul installieren MariaDB [(keine)]> GLOBAL SETZEN rpl_semi_sync_master_enabled=1; #Halbsynchrone Funktion aktivieren MariaDB [(keine)]> GLOBALE VARIABLEN WIE '%semi%' ANZEIGEN;
+------------------------------------+--------+
| Variablenname | Wert |
+------------------------------------+--------+
| rpl_semi_sync_master_enabled | EIN | #Aktiviert | rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | EIN |
+------------------------------------+--------+
MariaDB [(keine)]> GLOBALEN STATUS ANZEIGEN WIE '%semi%';
+--------------------------------------------+----------+
| Variablenname | Wert |
+--------------------------------------------+----------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_keine_Zeiten | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | EIN |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_Wartezeit | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+----------+

2) Von Knoten 1

[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
log_bin
binlog_format=ZEILE
log-basename=Slave
server_id=2
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@slave1 ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=401,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> PLUGIN INSTALLIEREN rpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(keine)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
MariaDB [(keine)]> START SLAVE;
MariaDB [(keine)]> MASTER-PROTOKOLLE ANZEIGEN;
+------------------+------------+
| Protokollname | Dateigröße |
+------------------+------------+
| slave-bin.000001 | 26753 |
| slave-bin.000002 | 921736 |
| Slave-Bin.000003 | 245 |
+------------------+------------+
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIZIERT DURCH 'replpass';

3) Von Knoten 2

[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=3
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@slave2 ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='slave-bin.000003',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;

4) Von Knoten 3

[root@slave3 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=4
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
[root@slave3 ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.8',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='slave-bin.000003',
    -> MASTER_LOG_POS=245,
    -> MASTER_CONNECT_RETRY=10;
MariaDB [(keine)]> START SLAVE;

6. Implementierung verschlüsselter Übertragung und Replikation

Beim standardmäßigen Master-Slave-Replikationsprozess oder bei der Remote-Verbindung mit MySQL/MariaDB sind alle Daten in der Link-Kommunikation im Klartext. Der Zugriff auf Daten oder die Replikation von Daten im externen Netzwerk stellt ein Sicherheitsrisiko dar. Durch die Kopiermethode mittels SSL/TLS-Verschlüsselung kann die Sicherheit der Daten zusätzlich verbessert werden.

Aktivieren Sie SSL auf dem Hauptserver: [mysqld] Fügen Sie eine Zeile ssl hinzu
Konfigurieren Sie den Master-Server mit einem Zertifikat und einem privaten Schlüssel. Erstellen Sie ein Replikationskonto, das eine SSL-Verbindung erfordert. Geben Sie SSL-bezogene Optionen an, wenn Sie den Befehl CHANGER MASTER TO vom Slave-Server aus verwenden.

MariaDB [(keine)]> VARIABLEN WIE '%ssl%' ANZEIGEN;
+---------------+----------+
| Variablenname | Wert |
+---------------+----------+
| have_openssl | DEAKTIVIERT |
| have_ssl | DEAKTIVIERT |
| ssl_ca | |
| ssl_capath | |
| SSL-Zertifikat | |
| ssl_chiffre | |
| SSL-Schlüssel | |
+---------------+----------+

Besonderer Hinweis: Überprüfen Sie vor der Konfiguration, ob der MySQL-Dienst die SSL-Funktion unterstützt. Wenn der Wert von have_ssl „DISABLED“ ist, unterstützt er sie; wenn er „NO“ ist, unterstützt er sie nicht und muss neu kompiliert und installiert werden, oder es wird eine Version mit SSL-Funktion installiert.

1) CA

[root@CA ~]# mkdir /etc/my.cnf.d/ssl/
[root@CA ~]# cd /etc/my.cnf.d/ssl/
[root@CA ssl]# openssl genrsa 2048 > cakey.pem
[root@CA ssl]# openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650 #Selbstsigniertes Zertifikat Ländername (2-Buchstaben-Code) [XX]:CN
    Name des Staates oder der Provinz (vollständiger Name) []:beijing
    Ortsname (z. B. Stadt) [Standardstadt]: Peking
    Name der Organisation (z. B. Firma) [Standard Company Ltd]:testmysqlca 
    Name der Organisationseinheit (z. B. Abschnitt) []:opt
    Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:ca.testmysqlca.com

[root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
    Ländername (2-Buchstaben-Code) [XX]:CN
    Name des Staates oder der Provinz (vollständiger Name) []:beijing
    Ortsname (z. B. Stadt) [Standardstadt]: Peking
    Name der Organisation (z. B. Firma) [Standard Company Ltd]:testmysqlca
    Name der Organisationseinheit (z. B. Abschnitt) []:opt
    Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:master.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt #Masterzertifikat signieren [root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
    Ländername (2-Buchstaben-Code) [XX]:CN
    Name des Staates oder der Provinz (vollständiger Name) []:beijing
    Ortsname (z. B. Stadt) [Standardstadt]: Peking
    Name der Organisation (z. B. Firma) [Standard Company Ltd]:testmysqlca 
    Name der Organisationseinheit (z. B. Abschnitt) []:opt
    Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:slave.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt #Slave-Zertifikat signieren [root@CA ssl]# openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave2.key > slave2.csr
Ländername (2-Buchstaben-Code) [XX]:CN
Name des Staates oder der Provinz (vollständiger Name) []:beijing
Ortsname (z. B. Stadt) [Standardstadt]: Peking
Name der Organisation (z. B. Firma) [Standard Company Ltd]:testmysqlca
Name der Organisationseinheit (z. B. Abschnitt) []:opt
Allgemeiner Name (z. B. Ihr Name oder der Hostname Ihres Servers) []:slave2.testmysqlca.com
[root@CA ssl]# openssl x509 -req -in slave2.csr -CA cacert.pem -CAkey cakey.pem -set_serial 03 > slave2.crt #Slave2-Zertifikat signieren [root@CA ssl]# openssl verify -CAfile cacert.pem master.crt slave.crt slave2.crt #Prüfen, ob das Zertifikat verfügbar ist master.crt: OK
slave.crt: OK
slave2.crt: OK
Erstellen Sie zunächst den Ordner /etc/my.cnf.d/ssl/ auf jedem Knoten und kopieren Sie die entsprechenden Zertifikate, CA-Zertifikate und entsprechenden Schlüsseldateien dorthin. [root@CA ssl]# scp cacert.pem master.crt master.key [email protected]:/etc/my.cnf.d/ssl/
[root@CA ssl]# scp cacert.pem slave.crt slave.key [email protected]:/etc/my.cnf.d/ssl/ 
[root@CA ssl]# scp cacert.pem slave2.crt slave2.key [email protected]:/etc/my.cnf.d/ssl/

2) Meister

[root@master ~]# mkdir /etc/my.cnf.d/ssl/
[root@master ~]# vim /etc/my.cnf
[mysqld]
log_bin
binlog_format=ZEILE
log-basename=master
server_id=1
ssl #SSL-Funktion aktivieren ssl-ca=/etc/my.cnf.d/ssl/cacert.pem #Pfad des CA-Zertifikats angeben ssl-cert=/etc/my.cnf.d/ssl/master.crt #Pfad Ihres eigenen Zertifikats angeben ssl-key=/etc/my.cnf.d/ssl/master.key #Pfad Ihrer eigenen Schlüsseldatei angeben [root@master ~]# systemctl restart mariadb
MariaDB [(keine)]> GRANT REPLICATION SLAVE ON *.* TO repluser@'192.168.0.%' IDENTIFIED BY 'replpass' REQUIRE SSL; #Benutzer autorisieren und Benutzer zwingen, die SSL-Anmeldung zu aktivieren. MariaDB [(keine)]> SHOW MASTER LOGS;
+----------------------+----------+
| Protokollname | Dateigröße |
+----------------------+----------+
| master-bin.000001 | 26753 |
| master-bin.000002 | 921736 |
| master-bin.000003 | 413 |
+----------------------+----------+

3) Sklave1

[root@slave1 ~]# mkdir /etc/my.cnf.d/ssl/
[root@slave1 ~]# mysql -urepluser -preplpass -h192.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave.crt --ssl-key=/etc/my.cnf.d/ssl/slave.key
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=2
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
SSL-Zertifikat
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key
[root@slave1 ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=413,
    -> MASTER_CONNECT_RETRY=10,
    -> MASTER_SSL=1; #Beachten Sie, dass Sie angeben müssen, um die SSL-Verbindung zu aktivieren MariaDB [(keine)]> START SLAVE;

4) Sklave2

[root@slave2 ~]# mkdir /etc/my.cnf.d/ssl/
[root@slave2 ~]# mysql -urepluser -preplpass -h192.168.0.7 --ssl-ca=/etc/my.cnf.d/ssl/cacert.pem --ssl-cert=/etc/my.cnf.d/ssl/slave2.crt --ssl-key=/etc/my.cnf.d/ssl/slave2.key
[root@slave2 ~]# vim /etc/my.cnf
[mysqld]
schreibgeschützt = EIN
server_id=3
relay_log=Relay-Protokoll
relay_log_index=Relay-Log.index
SSL-Zertifikat
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave2.crt
ssl-key=/etc/my.cnf.d/ssl/slave2.key
[root@slave2 ~]# systemctl MariaDB neu starten
MariaDB [(keine)]> ÄNDERN SIE MASTER IN
    -> MASTER_HOST='192.168.0.7',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='master-bin.000003',
    -> MASTER_LOG_POS=413,
    -> MASTER_CONNECT_RETRY=10,
    -> MASTER_SSL=1;
MariaDB [(keine)]> START SLAVE;

7. Zusammenfassung der relevanten Anweisungen und Variablen für die MySQL-Replikation

Optionen:

  • log_bin aktiviert die binäre Protokollierung, die auf dem Master-Knoten oder dem Slave-Knoten in der kaskadierenden Replikation aktiviert werden muss.
  • binlog_format=ROW Die Aufzeichnung des Binärlogs erfolgt zeilenbasiert. Es wird dringend empfohlen,
  • log-basename=master | slave ... Der Präfixname des Binärprotokolls, nicht erforderlich, aber empfohlen
  • server_id = # Server-ID. Die ID jedes Knotens muss eindeutig sein.
  • relay_log = relay-log schaltet das Relay-Log ein und beginnt den Dateinamen mit Relay-Log.
  • relay_log_index = relay-log.index Relay-Log-Indexdatei
  • log_slave_updates wird verwendet, um den Vorgang der Datenänderung als Binärprotokoll aufzuzeichnen, wenn der SQL-Thread das Relay-Protokoll erneut liest. Es wird bei der kaskadierenden Replikation verwendet.
  • ssl SSL-Funktion aktivieren
    • ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
    • ssl-cert=/etc/my.cnf.d/ssl/master.crt
    • ssl-key=/etc/my.cnf.d/ssl/master.key
  • sync_binlog=1 Binärlog sofort nach jedem Schreibvorgang mit der Festplatte synchronisieren
    • innodb_flush_log_at_trx_commit=1 Jedes Transaktions-Commit synchronisiert das Protokoll sofort mit der Festplatte
    • sync_master_info=# #Nach dem Ereignis wird master.info mit der Festplatte synchronisiert
  • skip_slave_start=ON Slave nicht automatisch starten
  • sync_relay_log=# #Relay-Protokoll nach dem Schreiben mit der Festplatte synchronisieren
  • sync_relay_log_info=# #Synchronisieren Sie relay-log.info nach der Transaktion mit der Festplatte
  • auto_increment_offset=1 Automatischer Wachstumsstartpunkt, wird bei der Master-Master-Replikation verwendet

Variable:

  • replicate_do_db= gibt die Whitelist der Replikationsdatenbanken an
  • replicate_ignore_db=Blacklist für Replikationsdatenbank angeben
  • replicate_do_table= gibt eine Whitelist von Replikationstabellen an
  • replicate_ignore_table= Gibt die Blacklist der Replikationstabellen an
  • replicate_wild_do_table = foo%.bar% unterstützt Platzhalter
  • replicate_wild_ignore_table=Geben Sie die replizierte Tabelle an, Blacklist
  • rpl_semi_sync_slave_enabled=1 Aktiviert die halbsynchrone Replikation, die die Installation von Modulen erfordert

Anweisung:

  • START SLAVE; Master-Slave-Replikation starten
  • STOP SLAVE; Replikation stoppen
  • SLAVE-STATUS ANZEIGEN; Replikationsstatus anzeigen
    • Seconds_Behind_Master: 0 Gibt an, ob der Slave-Server hinter dem Master-Server zurückbleibt
  • RESET SLAVE ALL; Setzt die Konfiguration des Slave-Servers zurück
  • MASTER_SSL=1, wird mit CHANGE MASTER TO verwendet, um SSL-verschlüsselte Replikation zu aktivieren
    • MASTER_SSL_CA = "/etc/my.cnf.d/ssl/cacert.pem",
    • MASTER_SSL_CERT = "/etc/my.cnf.d/ssl/slave.crt",
    • MASTER_SSL_KEY = "/etc/my.cnf.d/ssl/slave.key";
  • PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr } Löschen Sie Binärprotokolle. Seien Sie vorsichtig.
  • SHOW MASTER STATUS Den Status des Binärlogs anzeigen
  • BINLOG-EREIGNISSE ANZEIGEN Binärprotokolle anzeigen
  • BINÄRE LOGS ANZEIGEN Binäre Logs anzeigen

Dies ist das Ende dieses Artikels über MySQL-Serie 13 MySQL-Replikation. Weitere Informationen zur MySQL-Replikation finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Prinzip und Implementierung der parallelen Replikation von MySQL5.7
  • Detaillierte Erläuterung der MySQL Master-Slave-Replikation und der Lese-/Schreibtrennung
  • Gängige Reparaturmethoden für die Trennung der MySQL Master-Slave-Replikation
  • Analyse von drei Parametern des MySQL-Replikationsproblems
  • Umfassende Analyse des MySql-Master-Slave-Replikationsmechanismus

<<:  Was bedeutet es, nach der CSS-Linkadresse ein Fragezeichen (?) hinzuzufügen?

>>:  Tipps zum Deaktivieren des Kompatibilitätsansichtsmodus von IE8 und IE9 mithilfe von HTML

Artikel empfehlen

Zusammenfassung einiger Gedanken zur Binlog-Optimierung in MySQL

Frage Frage 1: Wie kann der Leistungsverlust beho...

Das Balkendiagramm von Vue + Echart realisiert Statistiken zu Epidemiedaten

Inhaltsverzeichnis 1. Installieren Sie zuerst ech...

Docker legt Port 2375 frei, was zu Serverangriffen und -lösungen führt

Ich glaube, dass Studenten, die etwas über die Do...

So reduzieren Sie die Bildgröße mithilfe des mehrstufigen Docker-Builds

In diesem Artikel wird beschrieben, wie Sie die m...

HarborRestart-Vorgang nach dem Ändern der Konfigurationsdatei

Ich werde nicht viel Unsinn erzählen, schauen wir...

Kalendereffekt basierend auf jQuery

In diesem Artikelbeispiel wird der spezifische Co...

HTML+CSS zum Erstellen einer Schaltfläche im Cyberpunk-Stil

Erster Blick auf die Wirkung: Vorwort: Auf diese ...

Nginx-Weiterleitung basierend auf URL-Parametern

Anwendungsszenarien: Der Sprungpfad muss entsprec...

So verwenden Sie dynamische Parameter und berechnete Eigenschaften in Vue

1. Dynamische Parameter Ab 2.6.0 können Sie einen...

Spezifische Verwendung von MySQL-Fensterfunktionen

Inhaltsverzeichnis 1. Was ist eine Fensterfunktio...