10 changed files with 503 additions and 30 deletions
			
			
		- 
					23mysql-test/include/wait_for_slave_sql_error_and_skip.inc
- 
					151mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result
- 
					1mysql-test/suite/rpl/t/rpl_filter_tables_not_exist-slave.opt
- 
					205mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test
- 
					52sql/log_event.cc
- 
					41sql/log_event.h
- 
					2sql/sql_class.cc
- 
					8sql/sql_class.h
- 
					48sql/sql_parse.cc
- 
					2sql/sql_update.cc
| @ -0,0 +1,23 @@ | |||
| # ==== Purpose ==== | |||
| # | |||
| # Wait for slave SQL error, skip the erroneous statement and restart | |||
| # slave | |||
| # | |||
| # ==== Usage ==== | |||
| # | |||
| # let show_sql_error=0|1; | |||
| # source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| echo --source include/wait_for_slave_sql_error_and_skip.inc; | |||
| connection slave; | |||
| source include/wait_for_slave_sql_error.inc; | |||
| if ($show_sql_error) | |||
| { | |||
|   let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1); | |||
|   echo Last_SQL_Error = $error; | |||
| } | |||
| 
 | |||
| # skip the erroneous statement | |||
| set global sql_slave_skip_counter=1; | |||
| source include/start_slave.inc; | |||
| connection master; | |||
| @ -0,0 +1,151 @@ | |||
| stop slave; | |||
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; | |||
| reset master; | |||
| reset slave; | |||
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; | |||
| start slave; | |||
| CREATE TABLE t1 (id int, a int); | |||
| CREATE TABLE t2 (id int, b int); | |||
| CREATE TABLE t3 (id int, c int); | |||
| CREATE TABLE t4 (id int, d int); | |||
| CREATE TABLE t5 (id int, e int); | |||
| CREATE TABLE t6 (id int, f int); | |||
| CREATE TABLE t7 (id int, g int); | |||
| CREATE TABLE t8 (id int, h int); | |||
| CREATE TABLE t9 (id int, i int); | |||
| INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t3 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t4 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t5 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t6 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t7 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t8 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t9 VALUES (1, 1), (2, 2), (3, 3); | |||
| [on slave] | |||
| SHOW TABLES LIKE 't%'; | |||
| Tables_in_test (t%) | |||
| t1 | |||
| t2 | |||
| t3 | |||
| [on master] | |||
| UPDATE t7 LEFT JOIN t4 ON (t4.id=t7.id) SET d=0, g=0 where t7.id=1; | |||
| UPDATE t7 LEFT JOIN (t4, t5, t6) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t6.id) SET d=0, e=0, f=0, g=0 where t7.id=1; | |||
| UPDATE t4 LEFT JOIN (t7, t8, t9) ON (t4.id=t7.id and t4.id=t8.id and t4.id=t9.id) SET d=0, g=0, h=0, i=0 where t4.id=1; | |||
| UPDATE t7 LEFT JOIN (t8, t9) ON (t7.id=t8.id and t7.id=t9.id) SET g=0, h=0, i=0 where t7.id=1; | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET d=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET g=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET d=0, e=0, f=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t4, t5, t8) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t8.id) SET d=0, e=0, h=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t7, t8, t5) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t5.id) SET g=0, h=0, e=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t2, t3, t5) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t5.id) SET e=0 where t1.id=1; | |||
| UPDATE t4 LEFT JOIN t1 ON (t1.id=t4.id) SET a=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t7) ON (t4.id=t1.id and t7.id=t4.id) SET a = 0, d=0, g=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t2, t3) ON (t1.id=t4.id and t2.id=t4.id and t3.id=t4.id) SET a=0, b=0, c=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t2, t5) ON (t1.id=t4.id and t2.id=t4.id and t5.id=t4.id) SET a=0, b=0, e=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t6, t7) ON (t4.id=t1.id and t4.id=t6.id and t4.id=t7.id) SET a=0, d=0, f=0, g=0 where t4.id=1; | |||
| UPDATE t7 LEFT JOIN (t4, t1, t2) ON (t7.id=t4.id and t7.id=t1.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; | |||
| UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7.id=t8.id and t7.id=t4.id and t7.id=t1.id) SET a=0, d=0, g=0, h=0 where t7.id=1; | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t4' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; | |||
| --source include/wait_for_slave_sql_error_and_skip.inc | |||
| Last_SQL_Error = Error 'Table 'test.t7' doesn't exist' on query. Default database: 'test'. Query: 'UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1' | |||
| set global sql_slave_skip_counter=1; | |||
| include/start_slave.inc | |||
| [on slave] | |||
| show tables like 't%'; | |||
| Tables_in_test (t%) | |||
| t1 | |||
| t2 | |||
| t3 | |||
| SELECT * FROM t1; | |||
| id	a | |||
| 1	1 | |||
| 2	2 | |||
| 3	3 | |||
| SELECT * FROM t2; | |||
| id	b | |||
| 1	1 | |||
| 2	2 | |||
| 3	3 | |||
| SELECT * FROM t3; | |||
| id	c | |||
| 1	1 | |||
| 2	2 | |||
| 3	3 | |||
| [on master] | |||
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; | |||
| @ -0,0 +1 @@ | |||
| --replicate-do-table=test.t1 --replicate-do-table=test.t2 --replicate-do-table=test.t3 --replicate-ignore-table=test.t4 --replicate-ignore-table=test.t5 --replicate-ignore-table=test.t6 | |||
| @ -0,0 +1,205 @@ | |||
| # Test evaluation of replication table filter rules | |||
| # | |||
| # ==== Purpose ==== | |||
| # | |||
| # Test if replication table filter rules are properly evaluated when | |||
| # some of the tables referenced by the multiple-table update do not | |||
| # exist on slave. | |||
| # | |||
| # ==== Method ==== | |||
| # | |||
| # Master creates tables t1, t2, t3, t4, t5, t6, t7, t8, t9 and the | |||
| # slave is started with the following replication table filter rules: | |||
| # | |||
| # --replicate-do-table=t1 | |||
| # --replicate-do-table=t2 | |||
| # --replicate-do-table=t3 | |||
| # | |||
| # and | |||
| # | |||
| # --replicate-ignore-table=t4 | |||
| # --replicate-ignore-table=t5 | |||
| # --replicate-ignore-table=t6 | |||
| # | |||
| # So the slave only replicate changes to tables t1, t2 and t3 and only | |||
| # these tables exist on slave. | |||
| # | |||
| # From now on, tables t1, t2, and t3 are referenced as do tables, | |||
| # tables t4, t5, t6 are referenced as ignore tables, and tables t7, | |||
| # t8, t9 are referenced as other tables. | |||
| # | |||
| # All multi-table update tests reference tables that are not do | |||
| # tables, which do not exist on slave. And the following situations | |||
| # of multi-table update will be tested: | |||
| # | |||
| # 1. Do tables are not referenced at all | |||
| # 2. Do tables are not referenced for update | |||
| # 3. Ignore tables are referenced for update before do tables | |||
| # 4. Only do tables are referenced for update | |||
| # 5. Do tables and other tables are referenced for update | |||
| # 6. Do tables are referenced for update before ignore tables | |||
| # | |||
| # For 1, 2 and 3, the statement should be ignored by slave, for 4, 5 | |||
| # and 6 the statement should be accepted by slave and cause an error | |||
| # because of non-exist tables. | |||
| # | |||
| # ==== Related bugs ==== | |||
| # | |||
| # BUG#37051 Replication rules not evaluated correctly | |||
| 
 | |||
| 
 | |||
| source include/have_binlog_format_statement.inc; | |||
| source include/master-slave.inc; | |||
| 
 | |||
| # These tables are mentioned in do-table rules | |||
| CREATE TABLE t1 (id int, a int); | |||
| CREATE TABLE t2 (id int, b int); | |||
| CREATE TABLE t3 (id int, c int); | |||
| 
 | |||
| # These tables are mentioned in ignore-table rules | |||
| CREATE TABLE t4 (id int, d int); | |||
| CREATE TABLE t5 (id int, e int); | |||
| CREATE TABLE t6 (id int, f int); | |||
| 
 | |||
| # These tables are not mentioned in do-table or ignore-table rules | |||
| CREATE TABLE t7 (id int, g int); | |||
| CREATE TABLE t8 (id int, h int); | |||
| CREATE TABLE t9 (id int, i int); | |||
| 
 | |||
| INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t3 VALUES (1, 1), (2, 2), (3, 3); | |||
| 
 | |||
| INSERT INTO t4 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t5 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t6 VALUES (1, 1), (2, 2), (3, 3); | |||
| 
 | |||
| INSERT INTO t7 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t8 VALUES (1, 1), (2, 2), (3, 3); | |||
| INSERT INTO t9 VALUES (1, 1), (2, 2), (3, 3); | |||
| 
 | |||
| # Only t1, t2, t3 should be replicated to slave | |||
| sync_slave_with_master; | |||
| echo [on slave]; | |||
| SHOW TABLES LIKE 't%'; | |||
| 
 | |||
| connection master; | |||
| echo [on master]; | |||
| 
 | |||
| # | |||
| # Do tables are not referenced, these statements should be ignored by | |||
| # slave. | |||
| # | |||
| UPDATE t7 LEFT JOIN t4 ON (t4.id=t7.id) SET d=0, g=0 where t7.id=1; | |||
| UPDATE t7 LEFT JOIN (t4, t5, t6) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t6.id) SET d=0, e=0, f=0, g=0 where t7.id=1; | |||
| UPDATE t4 LEFT JOIN (t7, t8, t9) ON (t4.id=t7.id and t4.id=t8.id and t4.id=t9.id) SET d=0, g=0, h=0, i=0 where t4.id=1; | |||
| UPDATE t7 LEFT JOIN (t8, t9) ON (t7.id=t8.id and t7.id=t9.id) SET g=0, h=0, i=0 where t7.id=1; | |||
| 
 | |||
| # | |||
| # Do tables are not referenced for update, these statements should be | |||
| # ignored by slave. | |||
| # | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET d=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET g=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET d=0, e=0, f=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t4, t5, t8) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t8.id) SET d=0, e=0, h=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t7, t8, t5) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t5.id) SET g=0, h=0, e=0 where t1.id=1; | |||
| UPDATE t1 LEFT JOIN (t2, t3, t5) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t5.id) SET e=0 where t1.id=1; | |||
| 
 | |||
| # | |||
| # Ignore tables are referenced for update before do tables, these | |||
| # statements should be ignore by slave. | |||
| # | |||
| UPDATE t4 LEFT JOIN t1 ON (t1.id=t4.id) SET a=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t7) ON (t4.id=t1.id and t7.id=t4.id) SET a = 0, d=0, g=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t2, t3) ON (t1.id=t4.id and t2.id=t4.id and t3.id=t4.id) SET a=0, b=0, c=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t2, t5) ON (t1.id=t4.id and t2.id=t4.id and t5.id=t4.id) SET a=0, b=0, e=0, d=0 where t4.id=1; | |||
| UPDATE t4 LEFT JOIN (t1, t6, t7) ON (t4.id=t1.id and t4.id=t6.id and t4.id=t7.id) SET a=0, d=0, f=0, g=0 where t4.id=1; | |||
| UPDATE t7 LEFT JOIN (t4, t1, t2) ON (t7.id=t4.id and t7.id=t1.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; | |||
| UPDATE t7 LEFT JOIN (t8, t4, t1) ON (t7.id=t8.id and t7.id=t4.id and t7.id=t1.id) SET a=0, d=0, g=0, h=0 where t7.id=1; | |||
| 
 | |||
| # Sync slave to make sure all above statements are correctly ignored, | |||
| # if any of the above statement are not ignored, it would cause error | |||
| # and stop slave sql thread. | |||
| sync_slave_with_master; | |||
| connection master; | |||
| 
 | |||
| # Parameter for include/wait_for_slave_sql_error_and_skip.inc, ask it | |||
| # to show SQL error message | |||
| let show_sql_error=1; | |||
| 
 | |||
| # | |||
| # Only do tables are referenced for update, these statements should | |||
| # cause error on slave | |||
| # | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t4, t7) ON (t1.id=t4.id and t1.id=t7.id) SET a=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t2, t4, t7) ON (t1.id=t2.id and t1.id=t4.id and t1.id=t7.id) SET a=0, b=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t2, t3, t7) ON (t1.id=t2.id and t1.id=t3.id and t1.id=t7.id) SET a=0, b=0, c=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| # | |||
| # Do tables and other tables are referenced for update, these | |||
| # statements should cause error on slave | |||
| # | |||
| UPDATE t1 LEFT JOIN t7 ON (t1.id=t7.id) SET a=0, g=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t7 LEFT JOIN t1 ON (t1.id=t7.id) SET a=0, g=0 where t7.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t4, t5, t7) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t7.id) SET a=0, g=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t4, t7, t8) ON (t1.id=t4.id and t1.id=t7.id and t1.id=t8.id) SET a=0, g=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t7, t8, t9) ON (t1.id=t7.id and t1.id=t8.id and t1.id=t9.id) SET a=0, g=0, h=0, i=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t7 LEFT JOIN (t1, t2, t3) ON (t7.id=t1.id and t7.id=t2.id and t7.id=t3.id) SET g=0, a=0, b=0, c=0 where t7.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t7 LEFT JOIN (t4, t5, t3) ON (t7.id=t4.id and t7.id=t5.id and t7.id=t3.id) SET g=0, c=0 where t7.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t7 LEFT JOIN (t8, t9, t3) ON (t7.id=t8.id and t7.id=t9.id and t7.id=t3.id) SET g=0, h=0, i=0, c=0 where t7.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| # | |||
| # Do tables are referenced for update before ignore tables | |||
| # | |||
| UPDATE t1 LEFT JOIN t4 ON (t1.id=t4.id) SET a=0, d=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t1 LEFT JOIN (t4, t5, t6) ON (t1.id=t4.id and t1.id=t5.id and t1.id=t6.id) SET a=0, d=0, e=0, f=0 where t1.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t4 LEFT JOIN (t1, t5, t6) ON (t4.id=t1.id and t4.id=t5.id and t4.id=t6.id) SET a=0, e=0, f=0 where t4.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| UPDATE t7 LEFT JOIN (t1, t4, t2) ON (t7.id=t1.id and t7.id=t4.id and t7.id=t2.id) SET a=0, b=0, d=0, g=0 where t7.id=1; | |||
| source include/wait_for_slave_sql_error_and_skip.inc; | |||
| 
 | |||
| sync_slave_with_master; | |||
| echo [on slave]; | |||
| 
 | |||
| # We should only have tables t1, t2, t3 on slave | |||
| show tables like 't%'; | |||
| 
 | |||
| # The rows in these tables should remain untouched | |||
| SELECT * FROM t1; | |||
| SELECT * FROM t2; | |||
| SELECT * FROM t3; | |||
| 
 | |||
| # Clean up | |||
| connection master; | |||
| echo [on master]; | |||
| drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; | |||
| source include/master-slave-end.inc; | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue