- MySQL Master-Version: 5.5.16-1
- MySQL Slave-Version: 5.5.18-1
Der Snapshot des Masters wird erstellt von:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Diese Dump-Datei wird auf den Slave importiert (mit dem gestartet wird --skip-slave-start
ohne Fehler Option ):
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Aber ich habe den folgenden Fehler beim Ausführen des mysql> start slave;
:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '115846' for key
'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO
request_posted (id, user_id, channel, message, link, picture, name, ...
Es gibt nur einen Datensatz mit der ID 115846 auf dem Master:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Versuchen Sie, einige Abfragen zu überspringen mit:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
hat nicht geholfen. Ich möchte diese Fehler nicht überspringen, indem ich Folgendes hinzufüge:
slave-skip-errors = 1062
zu my.cnf
archivieren, weil es Slave inkonsistent bringen kann.
Was kann der Grund für diesen Fehler sein?
AKTUALISIEREN
So richte ich normalerweise die mySQL-Replikation nicht ein
Welche Schritte, von denen Sie glauben, dass ich dem Dokument nicht folge?
Ich frage mich, ob Sie auf dasselbe Problem stoßen werden, wenn Sie die gesamte Konfiguration einrichten und nicht den Befehl mysqldump übergeben.
Nein, es funktioniert wie gewohnt, wenn ich auch den Master auf entsprechende Koordinaten ändere.
Ich würde versuchen, die Datenbank auf dem Slave abzulegen, sicherzustellen, dass die Binlogs klar sind, und erneut starten. Überprüfen Sie auch die betreffende Tabelle auf dem Master, um sicherzustellen, dass die Indizes keine Fehler aufweisen.
Reicht das Löschen (Verschieben) des gesamten Datenverzeichnisses aus? Ich habe das getan und das gleiche Ergebnis erzielt.
Antwort an @Dmytro Leonenko
MASTER_LOG_POS ist 0, um sicherzustellen, dass es richtig konfiguriert ist
Nur 'Slave Statug \ G' nach dem Import anzeigen, aber vor 'Slave starten'; kann uns die Antwort geben
Ich habe den Datadir gesichert, alle gelöscht und ausgeführt mysql_install_db
, die Dump-Datei importiert, ausgeführt change master to
und hier sind die Ergebnisse:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: x.x.x.x
Master_User: xx
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: No
Slave_SQL_Running: No
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: 0
Relay_Log_Space: 106
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
Ich frage mich, warum Master_Log_Pos 4 ist?
--master-data
Option besteht bereits darin, die binären Protokollkoordinaten in die Speicherauszugsdatei zu schreiben. Ich muss nur master in master_host, master_user, master_password ändern.
--master-data
Option beim Erstellen eines Datenschnappschusses nicht verwenden sollte ? Wenn es immer noch passiert, wenn ich die --lock-all-tables
Option verwende und change master to master_log_file='', master_log_pos='', ...
was kann die Ursache dafür sein?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
Ändert sich die Abfrage, die den Fehler verursacht, im geringsten? Wurde die Position des Slave-Binlog korrekt eingerichtet?