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
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;
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.
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