| Bug #97027 | Bulk insert with ON DUPLICATE KEY UPDATE breaks replicaiton | ||
|---|---|---|---|
| Submitted: | 26 Sep 2019 10:02 | Modified: | 15 Jan 2021 16:20 |
| Reporter: | Christian Roser | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Row Based Replication ( RBR ) | Severity: | S2 (Serious) |
| Version: | 5.7.* | OS: | Any |
| Assigned to: | CPU Architecture: | x86 | |
| Tags: | bulk, RBR, regression | ||
[26 Sep 2019 10:04]
Christian Roser
sql file to break replication
Attachment: break_replication.sql (application/sql, text), 95 bytes.
[26 Sep 2019 10:04]
Christian Roser
file to initialize test database
Attachment: db.sql (application/sql, text), 1.87 KiB.
[8 Oct 2019 15:13]
MySQL Verification Team
5.7.27 to 5.7.27 works ok
master [localhost:19428] {root} (test) > CREATE TABLE `t1` (
-> `id` int(11) DEFAULT NULL,
-> `test` varchar(255) DEFAULT 'hallo',
-> UNIQUE KEY `id` (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
master [localhost:19428] {root} (test) > INSERT INTO `t1` VALUES (1,'foo'),(2,'test'),(3,'lorem');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0
master [localhost:19428] {root} (test) > insert into t1 values(1, 'test'), (1, 'bar') on duplicate key update test=values(test);
Query OK, 4 rows affected (0.01 sec)
Records: 2 Duplicates: 2 Warnings: 0
master [localhost:19428] {root} (test) >
---
slave1 [localhost:19429] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | foo |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
slave1 [localhost:19429] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | bar |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
slave1 [localhost:19429] {msandbox} (test) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 19428
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 4955
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 5168
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 4955
Relay_Log_Space: 5371
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 100
Master_UUID: 00019428-1111-1111-1111-111111111111
Master_Info_File: /home/arhimed/sandboxes/rsandbox_5_7_27/node1/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
slave1 [localhost:19429] {msandbox} (test) >
[8 Oct 2019 15:24]
MySQL Verification Team
5.6.44 to 5.7.27 - works
5.6.44 to 8.0.17 - works
mysql [localhost:5645] {root} (test) > CREATE TABLE `t1` (
-> `id` int(11) DEFAULT NULL,
-> `test` varchar(255) DEFAULT 'hallo',
-> UNIQUE KEY `id` (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql [localhost:5645] {root} (test) > INSERT INTO `t1` VALUES (1,'foo'),(2,'test'),(3,'lorem');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql [localhost:5645] {root} (test) > insert into t1 values(1, 'test'), (1, 'bar') on duplicate key update test=values(test);
Query OK, 4 rows affected (0.04 sec)
Records: 2 Duplicates: 2 Warnings: 0
mysql [localhost:5645] {msandbox} ((none)) > select @@version
-> ;
+------------+
| @@version |
+------------+
| 5.6.44-log |
+------------+
1 row in set (0.00 sec)
-----
mysql [localhost:5728] {msandbox} (test) > select @@version;
+------------+
| @@version |
+------------+
| 5.7.27-log |
+------------+
1 row in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | foo |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | bar |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 5645
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3946
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 1565
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 3946
Relay_Log_Space: 1768
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 5644
Master_UUID: 00005645-0000-0000-0000-000000005645
Master_Info_File: /home/arhimed/sandboxes/mv_slave1/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) >
[8 Oct 2019 15:25]
MySQL Verification Team
mysql [localhost:8018] {msandbox} (test) > select @@version;
+-----------+
| @@version |
+-----------+
| 8.0.17 |
+-----------+
1 row in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > show tables;
+----------------+
| Tables_in_test |
+----------------+
| t1 |
+----------------+
1 row in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | foo |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | bar |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 5645
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3946
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 1566
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 3946
Relay_Log_Space: 1770
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 5644
Master_UUID: 00005645-0000-0000-0000-000000005645
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) >
[8 Oct 2019 15:26]
MySQL Verification Team
Hi, I cannot reproduce your test case. Please make sure you are using LATEST versions of all servers you are replicating from/to when you cross major version ... so from 5.6.xx to 5.7.xx please first upgrade 5.6 to latest and replicate to latest 5.7 .. same for 8.0.xx thanks
[8 Oct 2019 15:39]
MySQL Verification Team
tested with 5.5.62 as a master too, works ok
mysql [localhost:5562] {root} (test) > show variables like 'version';
+---------------+------------+
| Variable_name | Value |
+---------------+------------+
| version | 5.5.62-log |
+---------------+------------+
1 row in set (0.00 sec)
mysql [localhost:5562] {root} (test) > CREATE TABLE `t1` (
-> `id` int(11) DEFAULT NULL,
-> `test` varchar(255) DEFAULT 'hallo',
-> UNIQUE KEY `id` (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql [localhost:5562] {root} (test) > INSERT INTO `t1` VALUES (1,'foo'),(2,'test'),(3,'lorem');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql [localhost:5562] {root} (test) > insert into t1 values(1, 'test'), (1, 'bar') on duplicate key update test=values(test);
Query OK, 4 rows affected (0.01 sec)
Records: 2 Duplicates: 2 Warnings: 0
mysql [localhost:5562] {root} (test) >
----
mysql [localhost:5728] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | bar |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 5562
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3843
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 1971
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 3843
Relay_Log_Space: 2174
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 5562
Master_UUID:
Master_Info_File: /home/arhimed/sandboxes/mv_slave1/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) > select @@version;
+------------+
| @@version |
+------------+
| 5.7.27-log |
+------------+
1 row in set (0.00 sec)
mysql [localhost:5728] {msandbox} (test) >
[8 Oct 2019 15:39]
MySQL Verification Team
mysql [localhost:8018] {msandbox} (test) > select * from t1;
+------+-------+
| id | test |
+------+-------+
| 1 | bar |
| 2 | test |
| 3 | lorem |
+------+-------+
3 rows in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 5562
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3843
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 1972
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
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: 3843
Relay_Log_Space: 2176
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 5562
Master_UUID:
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
mysql [localhost:8018] {msandbox} (test) > select @@version
-> ;
+-----------+
| @@version |
+-----------+
| 8.0.17 |
+-----------+
1 row in set (0.00 sec)
[8 Oct 2019 17:25]
Christian Roser
I managed to find the causing mysql setting: slave_rows_search_algorithms = 'INDEX_SCAN,HASH_SCAN' using this setting triggers the bug behaviour
[8 Oct 2019 17:29]
Christian Roser
We introduced the setting to avoid slaves lagging behind due to big row events on tables without primary keys. The setting reduced the lagging slaves a lot so it would be nice if we could use it without breaking replication instead
[8 Oct 2019 17:55]
MySQL Verification Team
Hi, That is a possible side effect, not my place really to tell you what to do but you really outta be finding a way to have PK on all tables. You might want to contact our MySQL Support Team to help you with that migration, I'm sure they can be of huge help. kind regards
[15 Jan 2021 0:53]
zhijun long
Version: 5.7.31 mtr case: --source include/master-slave.inc connection master; select version(); show variables like "slave_rows_search_algorithms"; connection slave; set global slave_rows_search_algorithms = 'INDEX_SCAN,HASH_SCAN'; connection master; CREATE TABLE `t1` (`id` int(11) DEFAULT NULL, `test` varchar(255) DEFAULT 'hallo', UNIQUE KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `t1` VALUES (1,'foo'),(2,'test'),(3,'lorem'); insert into t1 values(1, 'test'), (1, 'bar') on duplicate key update test=values(test); drop table t1; connection slave; show slave status; --source include/sync_slave_sql_with_master.inc set global slave_rows_search_algorithms = 'TABLE_SCAN,INDEX_SCAN'; --source include/rpl_end.inc result: Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error Replicate_Ignore_Server_Ids Master_Server_Id Master_UUID Master_Info_File SQL_Delay SQL_Remaining_Delay Slave_SQL_Running_State Master_Retry_Count Master_Bind Last_IO_Error_Timestamp Last_SQL_Error_Timestamp Master_SSL_Crl Master_SSL_Crlpath Retrieved_Gtid_Set Executed_Gtid_Set Auto_Position Replicate_Rewrite_DB Channel_Name Master_TLS_Version Waiting for master to send event 127.0.0.1 root 13000 1 master-bin.000001 1192 slave-relay-bin.000002 933 master-bin.000001 Yes Yes 1032 Could not execute Update_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 981 0 718 1614 None 0 No 0 No 0 1032 Could not execute Update_rows event on table test.t1; Can't find record in 't1', Error_code: 1032; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 981 1 13a3d7b7-56cd-11eb-ad0f-3c15fb5cc47b /xx/mysql-5.7.31/cmake_build/mysql-test/var/mysqld.2/data/master.info 0 NULL System lock 10 210115 04:00:36

Description: If there is table without primary key which has a unique constraint it is possible that bulk inserts break the replication. We have several customers which migrate their database from our 'old' MySQL 5.5 platform to MySQL 5.7. It happens frequently that replication breaks with errors like this: mysql (db)> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: dba1107a.db.server.lan Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 2498 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 2374 Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes 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: 1032 Last_Error: Could not execute Update_rows event on table db.t1; Can't find record in 't1', Error_code: 1032; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000003, end_log_pos 2467 Skip_Counter: 0 Exec_Master_Log_Pos: 2208 Relay_Log_Space: 2865 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: 1032 Last_SQL_Error: Could not execute Update_rows event on table db.t1; Can't find record in 't1', Error_code: 1032; Can't find record in 't1', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000003, end_log_pos 2467 Replicate_Ignore_Server_Ids: Master_Server_Id: 172779842 Master_UUID: ce33d87c-e037-11e9-9d3d-001a4a01057b Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 190926 10:35:29 Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec) This happens, if a client runs a INSERT ... ON DUPLICATE KEY UPDATE on a table and some preconditions are met: * no primary key * multiple rows inserted at once * unique constraint must be hit * same value has to be inserted more than once the test database looks like this: mysql (db)> select * from t1; +------+-------+ | id | test | +------+-------+ | 1 | foo | | 2 | test | | 3 | lorem | +------+-------+ 3 rows in set (0.01 sec) mysql (db)> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE "t1" ( "id" int(11) DEFAULT NULL, "test" varchar(255) DEFAULT 'hallo', UNIQUE KEY "id" ("id") ) 1 row in set (0.00 sec) If you run the following statement the replication breaks: insert into t1 values(1, 'test'), (1, 'bar') on duplicate key update test=values(test); I created a testcase which is able to produce this behaviour. I tagged this as regression because this doesn't exist on MySQL 5.5. Unfortunately we have no control over the application so we cannot avoid these types of queries at all. How to repeat: # on master mysql < db.sql mysql < break_replication.sql