160 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			160 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
|  | ##################################################################
 | ||
|  | # Author: Giuseppe, Chuck Bell                                   #
 | ||
|  | # Date: 17-January-2007                                          #
 | ||
|  | # Purpose: To test that event effects are replicated             #
 | ||
|  | # in both row based and statement based format                   #
 | ||
|  | ##################################################################
 | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP EVENT IF EXISTS test.justonce; | ||
|  | drop table if exists t1,t2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # first, we need a table to record something from an event
 | ||
|  | 
 | ||
|  | eval CREATE TABLE `t1` ( | ||
|  |   `id` INT(10) UNSIGNED NOT NULL, | ||
|  |   `c` VARCHAR(50) NOT NULL, | ||
|  |   `ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | ||
|  |   PRIMARY KEY (`id`) | ||
|  | ) ENGINE=$engine_type DEFAULT CHARSET=utf8; | ||
|  | 
 | ||
|  | INSERT INTO t1 (id, c) VALUES (1, 'manually'); | ||
|  | 
 | ||
|  | # We create the event so that it inserts exactly 1 row in the table
 | ||
|  | # A recuring event is used so that we can be sure the event will
 | ||
|  | # fire regardless of timing delays on the server. Otherwise, it is
 | ||
|  | # possible for the event to timeout before it has inserted a row.
 | ||
|  | --echo "Creating event test.justonce on the master" | ||
|  | CREATE EVENT test.justonce ON SCHEDULE EVERY 2 SECOND DO  | ||
|  |   INSERT IGNORE INTO t1 (id, c) VALUES (2, 'from justonce'); | ||
|  | 
 | ||
|  | # Show the event is alive and present on master
 | ||
|  | --echo "Checking event is active on master" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce'; | ||
|  | 
 | ||
|  | # Wait until event has fired. We know this because t1 will contain 
 | ||
|  | # the row from the event.
 | ||
|  | let $wait_condition= | ||
|  |   SELECT COUNT(*) = 1 FROM t1 WHERE c = 'from justonce'; | ||
|  | --source include/wait_condition.inc | ||
|  | 
 | ||
|  | # check that table t1 contains something
 | ||
|  | --echo "Checking event data on the master" | ||
|  | let $events_done=`SELECT count(*)  FROM t1 id`; | ||
|  | --disable_query_log | ||
|  | eval SELECT $events_done > 0 as ONE; | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | sync_slave_with_master; | ||
|  | 
 | ||
|  | --echo "Checking event data on the slave" | ||
|  | --disable_query_log | ||
|  | eval SELECT count(*) - $events_done as ZERO FROM t1 id; | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | --echo "Checking event is inactive on slave" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce'; | ||
|  | 
 | ||
|  | # Create an event on the slave and check to see what the originator is.
 | ||
|  | --echo "Dropping event test.slave_once on the slave" | ||
|  | --disable_warnings | ||
|  | DROP EVENT IF EXISTS test.slave_once; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # Create an event on slave and check its state. An event shouldn't be executed 
 | ||
|  | # so set start time in 1 hour.
 | ||
|  | CREATE EVENT test.slave_once ON SCHEDULE EVERY 5 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO  | ||
|  |   INSERT IGNORE INTO t1(id, c) VALUES (3, 'from slave_once'); | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave for originator value = slave's server_id" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_once'; | ||
|  | 
 | ||
|  | --echo "Dropping event test.slave_once on the slave" | ||
|  | --disable_warnings | ||
|  | DROP EVENT IF EXISTS test.slave_once; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | connection master; | ||
|  | 
 | ||
|  | # BUG#20384 - disable events on slave
 | ||
|  | --echo "Dropping event test.justonce on the master" | ||
|  | --disable_warnings | ||
|  | DROP EVENT IF EXISTS test.justonce; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # Create an event on master and check its state on slave. An event shouldn't be executed 
 | ||
|  | # so set start time in 1 hour. Check that changes of event statement replicated to slave
 | ||
|  | 
 | ||
|  | --echo "Creating event test.er on the master" | ||
|  | CREATE EVENT test.er ON SCHEDULE EVERY 3 SECOND STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO  | ||
|  |   INSERT IGNORE INTO t1(id, c) VALUES (4, 'from er'); | ||
|  | 
 | ||
|  | --echo "Checking event status on the master" | ||
|  | SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er'; | ||
|  | 
 | ||
|  | sync_slave_with_master; | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave" | ||
|  | SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er'; | ||
|  | 
 | ||
|  | connection master; | ||
|  | --echo "Altering event test.er on the master" | ||
|  | ALTER EVENT test.er ON SCHEDULE EVERY 5 SECOND STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO  | ||
|  |   INSERT IGNORE INTO t1(id, c) VALUES (5, 'from alter er'); | ||
|  | 
 | ||
|  | --echo "Checking event status on the master" | ||
|  | SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er'; | ||
|  | 
 | ||
|  | sync_slave_with_master; | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave" | ||
|  | SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er'; | ||
|  | 
 | ||
|  | connection master; | ||
|  | --echo "Dropping event test.er on the master" | ||
|  | DROP EVENT test.er; | ||
|  | 
 | ||
|  | --echo "Checking event status on the master" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test'; | ||
|  | 
 | ||
|  | --disable_info | ||
|  | 
 | ||
|  | sync_slave_with_master; | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test'; | ||
|  | 
 | ||
|  | # test the DISABLE ON SLAVE for setting event SLAVESIDE_DISABLED as status
 | ||
|  | # on CREATE EVENT
 | ||
|  | 
 | ||
|  | # Create an event on slave and check its status. An event shouldn't be executed 
 | ||
|  | # so set start time in 1 hour.
 | ||
|  | 
 | ||
|  | --echo "Creating event test.slave_terminate on the slave" | ||
|  | CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO  | ||
|  |   INSERT IGNORE INTO t1(id, c) VALUES (6, 'from slave_terminate'); | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_terminate'; | ||
|  | 
 | ||
|  | --echo "Dropping event test.slave_terminate on the slave" | ||
|  | DROP EVENT test.slave_terminate; | ||
|  | 
 | ||
|  | --echo "Creating event test.slave_terminate with DISABLE ON SLAVE on the slave" | ||
|  | CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND DISABLE ON SLAVE DO  | ||
|  |   INSERT IGNORE INTO t1(c) VALUES (7, 'from slave_terminate'); | ||
|  | 
 | ||
|  | --echo "Checking event status on the slave" | ||
|  | SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_terminate'; | ||
|  | 
 | ||
|  | --echo "Dropping event test.slave_terminate on the slave" | ||
|  | DROP EVENT test.slave_terminate; | ||
|  | 
 | ||
|  | --echo "Cleanup" | ||
|  | connection master; | ||
|  | DROP TABLE t1; | ||
|  | sync_slave_with_master; | ||
|  | connection master; | ||
|  | 
 |