- Versione MySQL Master: 5.5.16-1
- Versione di MySQL Slave: 5.5.18-1
Lo snapshot del master è creato da:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Questo file di dump viene importato sullo slave (che viene avviato con l' --skip-slave-start
opzione) senza errori:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Ma ho visualizzato il seguente errore durante l'esecuzione di 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, ...
Esiste un solo record con ID 115846 sul master:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Prova a saltare alcune query con:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
non ha aiutato. Non voglio saltare quegli errori aggiungendo:
slave-skip-errors = 1062
al my.cnf
file perché può portare incoerente allo slave.
Quale può essere la ragione di questo errore?
AGGIORNARE
Non è così che di solito installo la replica mySQL
Quali passi pensi che non segua il documento?
Mi chiedo se incontrerai lo stesso problema se dovessi impostare l'intera configurazione piuttosto che passare il comando mysqldump.
No, funziona normalmente se cambio anche il master in coordinate corrispondenti.
Vorrei provare a far cadere il database sullo slave, assicurarsi che i binlog siano chiari e ricominciare. Controlla anche la tabella in questione sul master per assicurarti che gli indici non abbiano errori.
Elimina (sposta) tutto il datadir è sufficiente? L'ho fatto e ho ottenuto lo stesso risultato.
Rispondi a @Dmytro Leonenko
'mostra stato slave \ G' sullo slave per assicurarsi che sia configurato correttamente, MASTER_LOG_POS è 0
Solo 'show slave statug \ G' dopo l'importazione ma prima di 'start slave;' può darci la risposta
Ho eseguito il backup del datadir, cancellato tutto ed eseguito mysql_install_db
, importato il file di dump, eseguito change master to
ed ecco i risultati:
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)
Mi chiedo perché Master_Log_Pos è 4?
--master-data
opzione è già scrivere le coordinate del registro binario nel file di dump. Devo solo cambiare master in master_host, master_user, master_password.
--master-data
opzione durante la creazione di un'istantanea dei dati? Se succede ancora quando uso l' --lock-all-tables
opzione e change master to master_log_file='', master_log_pos='', ...
, quali possono essere le cause?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
La query che causa l'errore cambia almeno? La posizione del binlog slave è stata impostata correttamente?