- Versión maestra de MySQL: 5.5.16-1
- Versión esclava de MySQL: 5.5.18-1
La instantánea del maestro es creada por:
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump --all-databases --master-data > dbname_`date +%F`.sql
Este archivo de volcado se importa en el esclavo (que se inicia con la --skip-slave-start
opción) sin error:
shell> pv dbname_`date +%F`.sql | mysql -u root -p
Pero recibí el siguiente error al ejecutar el 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, ...
Solo hay un registro con ID 115846 en el maestro:
mysql> select count(*) from request_posted where id=115846;
Current database: db
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.01 sec)
Intenta saltear algunas consultas con:
mysql> STOP SLAVE;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> START SLAVE;
no ayudó No quiero omitir esos errores agregando:
slave-skip-errors = 1062
al my.cnf
archivo porque puede traer inconsistente esclavo.
¿Cuál puede ser la razón de este error?
ACTUALIZAR
No es así como suelo configurar la replicación mySQL
¿Qué pasos crees que no sigo el documento?
Me pregunto si encontrarás el mismo problema si configuraras toda la configuración en lugar de pasar el comando mysqldump.
No, funciona normalmente si también cambio el maestro a las coordenadas correspondientes.
Intentaría soltar la base de datos en el esclavo, asegurarme de que los binlogs estén limpios y comenzar de nuevo. Compruebe también la tabla en cuestión en el maestro para asegurarse de que los índices no tengan errores.
¿Es suficiente eliminar (mover) todos los datos? Lo hice y obtuve el mismo resultado.
Responder a @Dmytro Leonenko
'mostrar el estado del esclavo \ G' en el esclavo para asegurarse de que esté configurado correctamente, MASTER_LOG_POS es 0
Solo 'mostrar esclavo statug \ G' después de la importación pero antes de 'iniciar esclavo'; nos puede dar la respuesta
Realicé una copia de seguridad del datadir, eliminé todo y ejecuté, importé mysql_install_db
el archivo de volcado, ejecuté change master to
y aquí están los resultados:
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)
Me pregunto por qué Master_Log_Pos es 4?
--master-data
opción ya es escribir las coordenadas del registro binario en el archivo de volcado. Solo necesito cambiar master a master_host, master_user, master_password.
--master-data
opción al crear una instantánea de datos? Si todavía sucede cuando uso la --lock-all-tables
opción y change master to master_log_file='', master_log_pos='', ...
, ¿cuáles pueden ser las causas?
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1
¿La consulta que causa el error cambia en lo más mínimo? ¿Se configuró correctamente la posición del binlog esclavo?