Details
-
Type:
Bug
-
Status: Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Affects Version/s: 10.0.1
-
Fix Version/s: 10.0
-
Component/s: None
-
Labels:None
Description
Patch to set a debug sync point (on 10.0-base igor@askmonty.org-20130113101122-zlycez54xirrq9z6 revno 3468):
=== modified file 'sql/sql_admin.cc'
--- sql/sql_admin.cc 2012-12-14 07:05:12 +0000
+++ sql/sql_admin.cc 2013-01-13 22:54:12 +0000
@@ -1092,6 +1092,7 @@
/*
Presumably, ANALYZE and binlog writing doesn't require synchronization
*/
+ DEBUG_SYNC(thd,"analyze_before_write_bin_log");
res= write_bin_log(thd, TRUE, thd->query(), thd->query_length());
}
m_lex->select_lex.table_list.first= first_table;
Test case:
--source include/master-slave.inc --source include/have_binlog_format_row.inc SET use_stat_tables = PREFERABLY; CREATE TABLE t1 (i INT) ENGINE=MyISAM; SET DEBUG_SYNC="analyze_before_write_bin_log SIGNAL ready_to_binlog WAIT_FOR write"; --send ANALYZE TABLE t1; --connection master1 SET DEBUG_SYNC="now WAIT_FOR ready_to_binlog"; DELETE FROM mysql.table_stats; SET DEBUG_SYNC="now SIGNAL write"; --connection master --reap --sync_slave_with_master
Indication of the failure – slave complains
Could not execute Delete_rows event on table mysql.table_stats; Can't find record in 'table_stats', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log master-bin.000001, end_log_pos 557
and MTR prints a lot of stuff, including the error above and events from binary logs.
Problem:
First thread runs ANALYZE, writes a record into the stat table, but not yet into the binary log. At this time another thread runs DELETE, finds the record and immediately writes it to the binary log. Then the first thread finally writes ANALYZE into the binary log.
Slave reads the delete event first, attempts to find the requested row, fails (because there was no ANALYZE on the slave yet), SQL thread aborts.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions