- Version de MySQL Master: 5.5.16-1
- Version MySQL Slave: 5.5.18-1
L'instantané du maître est créé par:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Ce fichier de vidage est importé sur l'esclave (qui est démarré avec --skip-slave-start
option) sans erreur:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Mais j'ai eu l'erreur suivante lors de l'exécution de 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, ...
Il n'y a qu'un seul enregistrement avec l'ID 115846 sur le maître:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Essayez d'ignorer certaines requêtes avec:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
n'a pas aidé. Je ne veux pas ignorer ces erreurs en ajoutant:
slave-skip-errors = 1062
à my.cnf
déposer car cela peut rendre l'esclave incohérent.
Quelle peut être la raison de cette erreur?
MISE À JOUR
Ce n'est pas comme ça que je configure la réplication mySQL
Quelles étapes pensez-vous que je ne respecte pas le document?
Je me demande si vous rencontrerez le même problème si vous deviez installer la configuration entière plutôt qu'en passant la commande mysqldump.
Non, cela fonctionne normalement si je change également le maître en coordonnées correspondantes.
Je voudrais essayer de supprimer la base de données sur l'esclave, m'assurer que les binlogs sont clairs et recommencer. Vérifiez également le tableau en question sur le maître pour vous assurer que les index ne contiennent pas d'erreurs.
La suppression (déplacement) de toutes les données est-elle suffisante? Je l'ai fait et j'ai obtenu le même résultat.
Répondre à @Dmytro Leonenko
'afficher le statut de l'esclave \ G' sur l'esclave pour s'assurer qu'il est correctement configuré, MASTER_LOG_POS est 0
Uniquement "afficher l'esclave statug \ G" après l'importation mais avant "démarrer l'esclave;" peut nous donner la réponse
J'ai sauvegardé le datadir, tout supprimer et exécuter mysql_install_db
, importer le fichier de vidage, exécuter change master to
et voici les résultats:
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)
Je me demande pourquoi Master_Log_Pos a 4 ans?
--master-data
option est déjà d'écrire les coordonnées du journal binaire dans le fichier de vidage. J'ai seulement besoin de changer master en master_host, master_user, master_password.
--master-data
option lors de la création d'un instantané de données? Si cela se produit toujours lorsque j'utilise l' --lock-all-tables
option et change master to master_log_file='', master_log_pos='', ...
, quelles peuvent être les causes?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
émettez La requête à l'origine de l'erreur change-t-elle le moins? La position du journal des esclaves était-elle correctement configurée?