| Bug #81254 | Using INSERT_ID local variable, makes REPLACE fail when there is a duplicate key | ||
|---|---|---|---|
| Submitted: | 1 May 2016 7:53 | Modified: | 2 May 2016 10:08 |
| Reporter: | Miguel Angel Nieto | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: DML | Severity: | S2 (Serious) |
| Version: | 5.6, 5.6.30, 5.7.12 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[1 May 2016 7:53]
Miguel Angel Nieto
[1 May 2016 8:21]
Miguel Angel Nieto
In order to make the replication fail, you need to add some data inconsistency. For example: Master's PK goes from 1 to 3. Slaves' PK goes from 1 to 4. If you run a REPLACE on the master, it will be logged with SET SESSION_ID=4, and that will make slave to fail (when it should just DELETE and INSERT). To make the REPLACE fail without replication, just set INSERT_ID and it will behave as it was a normal INSERT.
[1 May 2016 9:31]
Miguel Angel Nieto
CREATE TABLE `test_import_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`idFile` int(11) NOT NULL,
`line` int(11) NOT NULL,
`email` varchar(255) NOT NULL,
`status` enum('Failed','Success','Duplicated') NOT NULL DEFAULT 'Failed',
`reason` text NOT NULL,
PRIMARY KEY (`id`),
KEY `idFile` (`idFile`)
) ENGINE=InnoDB;
[2 May 2016 10:08]
MySQL Verification Team
Hello Miguel, Thank you for the report and test case. Observed this with 5.6.30/5.7.12. Thanks, Umesh
