Heim  >  Artikel  >  Datenbank  >  MySQL-Master-Slave-Datenbanksynchronisierung

MySQL-Master-Slave-Datenbanksynchronisierung

高洛峰
高洛峰Original
2016-12-02 14:13:491219Durchsuche

Umgebung:
Master-Server: Centos 5.2 MySQL 5.1.35 Quell-IP: 192.168.1.22
Slave-Server: Centos 5.2 MySQL 5.1.35 Quell-IP: 192.168.1.33
Konfiguration:
一, Hauptserver
1.1. Erstellen Sie einen Replikationsbenutzer mit Replikations-Slave-Berechtigungen.
mysql>Replikations-Slave auf *.* an 'repl'@'192.168.1.22' gewähren, identifiziert durch 'repl';
1.2. Bearbeiten Sie die Datei my.cnf
vi /etc/my.cnf
Fügen Sie
server-id=1
hinzu und aktivieren Sie die binäre Protokolldatei log-bin
log-bin=mysql-bin
Hinweis: Die Standardserver-id=1 muss entfernt werden
1.3, starten Sie die MySQL-Datenbank
mysqld_safe –user=mysql &
1.4, setzen Sie die Lesesperre
mysql> leeren Sie Tabellen mit Lesesperre
1.5, rufen Sie den Binlog-Protokolldateinamen und den Offset ab
MySQL>+—————+———-+—————+
|. Binlog_Ignore_DB |
+—————+————-+————–+
| mysql-bin. 106|. —————+—— ——-+————–+——————+
1.6 Sichern Sie die zu synchronisierende Datenbank
mysqldump test > test.sql
1.7. Entsperren
mysql>unlock tables ;

2. Bearbeiten Sie vom Server aus

2.1, bearbeiten Sie die my.cnf-Datei

vi /etc/my.cnf
Hinzufügen
server-id=2
Hinweis: Die Standard-Server-ID=1 muss entfernt werden
2.2 Starten Sie die Slave-Datenbank
mysqld_safe –user=mysql &
Stellen Sie die Slave-Datenbank entsprechend ein
mysql> Master ändern in
-> master_user='repl'
-> mysql-bin.0000010′
-> master_log_pos=106;
2.4. Starten Sie den Slave-Server-Thread
mysql>start Slave;
Führen Sie den Befehl show Processlist aus, um die folgenden Prozesse anzuzeigen:
mysql>show ProcesslistG
******* ********************* 2. Zeile *********** ****************
ID: 2
Benutzer: Systembenutzer
Host:
Datenbank: NULL
Befehl: Verbinden
Zeit : 2579
Status: Hat das gesamte Relay-Protokoll gelesen; wartet darauf, dass der Slave-E/A-Thread es aktualisiert
Info: NULL bedeutet, dass der Slave eine Verbindung zum Master hergestellt und mit der Annahme und Ausführung von Protokollen begonnen hat
2.5 , Überprüfen Sie den Slave-Thread-Status
mysql>show Slave-Status;
*** ************************** 1. Zeile ** ******************** ****
Slave_IO_State: Warten auf das Senden eines Ereignisses durch den Master
Master_Host: 192.168.1.22
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin. 0000010
Read_Master_Log_Pos: 106
Relay_Log_File: centos-relay-bin.000002
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.0000010
Slave_IO_Running: Ja
Slave_SQL_Running: Ja
. Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wil d_Do_Table:
Replicate_Wild_Ignore_Table:
Letzter Fehler: 0 _SSL_Allowed: Nein
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: Nein
Last _IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 Zeile im Satz (0,00 Sek.)

Überprüfen Sie, ob die Konfiguration korrekt ist
Auf dem Slave-Server ausführen
Slave-Status anzeigenG;
Warten darauf, dass der Master ein Ereignis sendet
Slave_IO_Running: Ja
Slave_SQL_Running: Ja
Wie oben. Wenn die beiden Zeilen gleichzeitig „Ja“ lauten, bedeutet dies, dass die Konfiguration erfolgreich war

Test
1. Erstellen Sie die Benutzertabelle in der Testdatenbank des Hauptservers
mysql>use test;

mysql>create table user(id int);

2. Sehen Sie sich die Benutzertabelle im Slave-Server an
mysql> ;test verwenden;
mysql> Tabellen wie 'Benutzer' anzeigen;
+———————-+
| Tables_in_test (Benutzer) |
+——————— —-+
|. user |

+————————-+

1 Zeile im Satz (0,00 Sek.)
Dies bedeutet, dass die Master-Slave-Datensynchronisierung erfolgreich war.

Problem?
1. Tritt beim Anzeigen des Slave-Status aus der Datenbank auf
Der Slave-E/A-Thread stoppt, da Master und Slave gleiche MySQL-Server-IDs haben; diese IDs müssen unterschiedlich sein, damit die Replikation funktioniert (Oder die Option –replicate-same-server-id muss auf dem Slave verwendet werden, aber das macht nicht immer Sinn; bitte lesen Sie das Handbuch, bevor Sie sie verwenden)
Erklären Sie die Server-ID in my.cnf im Server. Es gibt das gleiche.
Lösung:
Ändern Sie die Server-ID in my.cnf und starten Sie den Datenbankdienst neu. Die Datei my.cnf hat standardmäßig die Server-ID=1

Weitere Anweisungen
Hauptserver my.cnf
#binlog-do-db=Der Name der Datenbank, die gesichert werden muss, Sie können mehrere Zeilen schreiben
#binlog-ignore-db= Der Name der Datenbank, die nicht gesichert werden muss. Kann mehrere Zeilen schreiben
Slave-Server my.cnf
# Replicate-do-db=Testdatenbankname, der gesichert werden soll
# Replicate-ignore -db=mysql ignorierte Datenbank
# master-connect- retry=60 Wenn der Slave-Server feststellt, dass die Verbindung zum Master-Server getrennt ist, beträgt die Zeitdifferenz für die erneute Verbindung (Sekunden)
Die folgenden Einstellungen können my.cnf auch direkt ändern Konfigurationsdatei
log-bin=mysql-bin
master-host= 192.168.1.22
master-user=repl
master-password=repl
master-port=3306

Master-Slave-Server-Synchronisierungswartung
Aus verschiedenen Gründen kann es zu Inkonsistenzen zwischen Master-Slave-Daten kommen. Führen Sie bei geringer Last eine manuelle Synchronisierung durch.
Auf dem Hauptserver ausführen

MySQL>Tabellen leeren mit Lesesperre;
Abfrage OK, Zeilen betroffen (0,01 Sek.)
mysql> ;Masterstatus anzeigen;
+——————+————-+————–+——— ———+
| mysql-bin.0000011 |. 260| >Erhalten Sie zunächst den Binärdateinamen und den Offset des aktuellen Master-Servers und führen Sie den Befehl aus, um den Slave-Server und den Master-Server zu synchronisieren
mysql>select master_pos_wait('mysql-bin.0000011′,'260′);
+—————————————–+
| master_pos_wait( 'mysql-bin.0000011′,'260′) |
+——————— —————————–+
|. 0 |
+—————— ———————————–+
1 Reihe im Satz (0,01 Sek.)
Nachdem die Synchronisierung abgeschlossen ist, führen Sie die Entsperrung auf dem Hauptserver durch
mysql>unlock tables;

Schalten Sie den Master-Slave-Server um

Wenn der Master-Server ausfällt, wird der Slave Der Server kann als Master-Server verwendet werden:
1. Stellen Sie sicher, dass alle Slave-Datenbanken alle Aktualisierungen im Relay-Protokoll durchgeführt haben Sehen Sie nach, ob der Status „Hat das gesamte Relay-Protokoll gelesen“ lautet, was darauf hinweist, dass die Aktualisierung abgeschlossen ist.

mysql>stop Slave io_thread;

Abfrage OK,0 betroffen (0,00 Sek.)

mysql>show ProcesslistG;

****************************** 2. Reihe ************ ***** **************
ID: 2
Benutzer: Systembenutzer
Host:
Datenbank: NULL
Befehl: Verbinden
Zeit: 4757
Status: Hat das gesamte Relay-Protokoll gelesen; wartet darauf, dass der Slave-E/A-Thread es aktualisiert.
Info: NULL
2. Führen Sie die Befehle „Slave stoppen“ und „Master zurücksetzen“ aus
MySQL>Slave stoppen;
Abfrage OK,0 betroffen (0,00 Sek.)
MySQL>Reset Master;
Abfrage OK,0 betroffen (0,00 Sek.)
3. Löschen Sie die Datei „master.info“. und die Dateien „relay-log.info“ im neuen Master-Server-Datenbankverzeichnis, andernfalls wird der Slave-Server beim nächsten Neustart gestartet



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn