diff --git a/mysql-test/r/rpl_bug7947.result b/mysql-test/r/rpl_bug7947.result new file mode 100644 index 00000000000..8053f47d7d5 --- /dev/null +++ b/mysql-test/r/rpl_bug7947.result @@ -0,0 +1,48 @@ +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; +begin; +create temporary table ti (a int) engine=innodb; +rollback; +Warnings: +Warning 1196 Some non-transactional changed tables couldn't be rolled back +insert into ti values(1); +set autocommit=0; +create temporary table t1 (a int) type=myisam; +Warnings: +Warning 1287 'TYPE=storage_engine' is deprecated; use 'ENGINE=storage_engine' instead +commit; +insert t1 values (1); +rollback; +create table t0 (n int); +insert t0 select * from t1; +set autocommit=1; +insert into t0 select GET_LOCK("lock1",null); +set autocommit=0; +create table t2 (n int) engine=innodb; +insert into t2 values (3); +select get_lock("lock1",null); +get_lock("lock1",null) +1 +show binlog events from 79; +Log_name Pos Event_type Server_id Orig_log_pos Info +master-bin.000001 79 Query 1 79 use `test`; BEGIN +master-bin.000001 119 Query 1 79 use `test`; create temporary table ti (a int) engine=innodb +master-bin.000001 201 Query 1 201 use `test`; ROLLBACK +master-bin.000001 244 Query 1 244 use `test`; insert into ti values(1) +master-bin.000001 303 Query 1 303 use `test`; BEGIN +master-bin.000001 343 Query 1 303 use `test`; create temporary table t1 (a int) type=myisam +master-bin.000001 423 Query 1 423 use `test`; COMMIT +master-bin.000001 464 Query 1 464 use `test`; create table t0 (n int) +master-bin.000001 522 Query 1 522 use `test`; insert t0 select * from t1 +master-bin.000001 583 Query 1 583 use `test`; insert into t0 select GET_LOCK("lock1",null) +master-bin.000001 662 Query 1 662 use `test`; create table t2 (n int) engine=innodb +master-bin.000001 734 Query 1 734 use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti` +master-bin.000001 835 Query 1 835 use `test`; DO RELEASE_LOCK("lock1") +select release_lock("lock1"); +release_lock("lock1") +1 +drop table t0,t2; diff --git a/mysql-test/t/rpl_bug7947.test b/mysql-test/t/rpl_bug7947.test new file mode 100644 index 00000000000..15630ebea04 --- /dev/null +++ b/mysql-test/t/rpl_bug7947.test @@ -0,0 +1,22 @@ +--source include/master-slave.inc +connection master; +begin; +create temporary table ti (a int) engine=innodb; +rollback; +insert into ti values(1); +set autocommit=0; +create temporary table t1 (a int) type=myisam; commit; +insert t1 values (1); rollback; +create table t0 (n int); +insert t0 select * from t1; +set autocommit=1; +insert into t0 select GET_LOCK("lock1",null); +set autocommit=0; +create table t2 (n int) engine=innodb; +insert into t2 values (3); +disconnect master; +connect (master,localhost,root,,test,$MASTER_MYPORT,master.sock); +select get_lock("lock1",null); +show binlog events from 79; +select release_lock("lock1"); +drop table t0,t2; diff --git a/sql/item_func.cc b/sql/item_func.cc index df32672e12b..d0a68e9f93e 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1974,7 +1974,7 @@ void item_user_lock_release(User_level_lock *ull) tmp.copy(command, strlen(command), tmp.charset()); tmp.append(ull->key,ull->key_length); tmp.append("\")", 2); - Query_log_event qev(current_thd, tmp.ptr(), tmp.length(),1, FALSE); + Query_log_event qev(current_thd, tmp.ptr(), tmp.length(),0, FALSE); qev.error_code=0; // this query is always safe to run on slave mysql_bin_log.write(&qev); }