Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.0.9
-
None
-
None
Description
If CREATE OR REPLACE TABLE is interrupted by KILL QUERY, it can still be written into binary log with error code 0, which means it will cause discrepancy in master/slave data.
Also, it can be written in a wrong way, e.g. in row-based format it can be written as a statement using a temporary table (which of course does not exist on slave), see the test case and its outcome:
Test case (run with --repeat=N)
--source include/master-slave.inc
|
--source include/have_binlog_format_row.inc
|
--source include/have_xtradb.inc
|
|
--let $master_id = `SELECT CONNECTION_ID()`
|
CREATE TABLE t1 (i INT, KEY(i)) ENGINE=InnoDB; |
CREATE OR REPLACE TEMPORARY TABLE tmp LIKE t1; |
--send
|
CREATE OR REPLACE TABLE t1 LIKE tmp; |
|
--connection master1
|
let $run = 10;
|
while ($run)
|
{
|
eval KILL QUERY $master_id;
|
dec $run; |
}
|
--connection master
|
--error 0,ER_QUERY_INTERRUPTED
|
--reap
|
--error 0,ER_QUERY_INTERRUPTED
|
SHOW TABLES; # To catch possible orphan ER_QUERY_INTERRUPTED |
SHOW TABLES;
|
--sync_slave_with_master
|
Result:
Last_SQL_Error Error 'Table 'test.tmp' doesn't exist' on query. Default database: 'test'. Query: 'CREATE OR REPLACE TABLE t1 LIKE tmp'
|
Binlog:
#140314 3:29:14 server id 1 end_log_pos 459 Query thread_id=8 exec_time=1 error_code=0
|
use `test`/*!*/;
|
SET TIMESTAMP=1394753354/*!*/;
|
SET @@session.pseudo_thread_id=8/*!*/;
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
|
SET @@session.sql_mode=0/*!*/;
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
/*!\C latin1 *//*!*/;
|
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
SET @@session.lc_time_names=0/*!*/;
|
SET @@session.collation_database=DEFAULT/*!*/;
|
CREATE TABLE t1 (i INT, KEY(i)) ENGINE=InnoDB
|
/*!*/;
|
# at 459
|
#140314 3:29:16 server id 1 end_log_pos 497 GTID 0-1-2
|
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
|
# at 497
|
#140314 3:29:16 server id 1 end_log_pos 595 Query thread_id=8 exec_time=1 error_code=0
|
SET TIMESTAMP=1394753356/*!*/;
|
CREATE OR REPLACE TABLE t1 LIKE tmp
|
/*!*/;
|
# at 595
|
#140314 3:29:17 server id 1 end_log_pos 633 GTID 0-1-3
|
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
revision-id: sergii@pisem.net-20140312113447-l92ytjpq6x952rlv
|
date: 2014-03-12 12:34:47 +0100
|
build-date: 2014-03-14 03:35:49 +0400
|
revno: 4049
|
branch-nick: 10.0
|