The all too common MySQL ‘Duplicate entry’ Error.
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: master-mysql.local Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.004768 Read_Master_Log_Pos: 1022786917 Relay_Log_File: relay-bin.001728 Relay_Log_Pos: 929659721 Relay_Master_Log_File: mysql-bin.004768 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: information_schema,mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1062 Last_Error: Error 'Duplicate entry 'xyz' for key 'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO data ( id, version ) VALUES (279598012, 5)' Skip_Counter: 0 Exec_Master_Log_Pos: 929659575 Relay_Log_Space: 1022787256 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: 1062 Last_SQL_Error:Error 'Duplicate entry 'xyz' for key 'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO data ( id, version ) VALUES (279598012, 5)' Replicate_Ignore_Server_Ids: Master_Server_Id: 10147115 1 row in set (0.00 sec)
The easy way to deal with this is to verify this it is a replication entry and running the following command.
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
However, if you have what seems to be a large number of duplicate entry error and don’t feel like skipping the entries one by one or you just don’t want replication to stop for this error. You can add the following to the /etc/my.cnf
slave-skip-errors = 1062
And restart the MySQL services. This will skip all the Duplicate entry errors until it’s removed and the MySQL is restarted.
Keep in mind, that this error can indicate other issues with the MySQL service or system, before skipping the error completely.