mix_innodb_myisam_binlog.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # Check that binlog is ok when a transaction mixes updates to InnoDB and
  2. # MyISAM.
  3. # It would be nice to make this a replication test, but in 4.0 the
  4. # slave is always with --skip-innodb in the testsuite. I (Guilhem) however
  5. # did some tests manually on a slave; tables are replicated fine and
  6. # Exec_Master_Log_Pos advances as expected.
  7. # Embedded server doesn't support binlogging
  8. -- source include/not_embedded.inc
  9. -- source include/have_innodb.inc
  10. --disable_warnings
  11. drop table if exists t1, t2;
  12. --enable_warnings
  13. connect (con1,localhost,root,,);
  14. connect (con2,localhost,root,,);
  15. connection con1;
  16. create table t1 (a int) engine=innodb;
  17. create table t2 (a int) engine=myisam;
  18. reset master;
  19. begin;
  20. insert into t1 values(1);
  21. insert into t2 select * from t1;
  22. commit;
  23. show binlog events from 79;
  24. delete from t1;
  25. delete from t2;
  26. reset master;
  27. begin;
  28. insert into t1 values(2);
  29. insert into t2 select * from t1;
  30. # should say some changes to non-transact1onal tables couldn't be rolled back
  31. rollback;
  32. show binlog events from 79;
  33. delete from t1;
  34. delete from t2;
  35. reset master;
  36. begin;
  37. insert into t1 values(3);
  38. savepoint my_savepoint;
  39. insert into t1 values(4);
  40. insert into t2 select * from t1;
  41. rollback to savepoint my_savepoint;
  42. commit;
  43. show binlog events from 79;
  44. delete from t1;
  45. delete from t2;
  46. reset master;
  47. begin;
  48. insert into t1 values(5);
  49. savepoint my_savepoint;
  50. insert into t1 values(6);
  51. insert into t2 select * from t1;
  52. rollback to savepoint my_savepoint;
  53. insert into t1 values(7);
  54. commit;
  55. select a from t1 order by a; # check that savepoints work :)
  56. show binlog events from 79;
  57. # and when ROLLBACK is not explicit?
  58. delete from t1;
  59. delete from t2;
  60. reset master;
  61. select get_lock("a",10);
  62. begin;
  63. insert into t1 values(8);
  64. insert into t2 select * from t1;
  65. disconnect con1;
  66. connection con2;
  67. # We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
  68. # guarantee that logging of the terminated con1 has been done yet (it may not
  69. # even be started, so con1 may have not even attempted to lock the binlog yet;
  70. # so SHOW BINLOG EVENTS may come before con1 does the loggin. To be sure that
  71. # logging has been done, we use a user lock.
  72. select get_lock("a",10);
  73. show binlog events from 79;
  74. # and when not in a transact1on?
  75. delete from t1;
  76. delete from t2;
  77. reset master;
  78. insert into t1 values(9);
  79. insert into t2 select * from t1;
  80. show binlog events from 79;
  81. # Check that when the query updat1ng the MyISAM table is the first in the
  82. # transact1on, we log it immediately.
  83. delete from t1;
  84. delete from t2;
  85. reset master;
  86. insert into t1 values(10); # first make t1 non-empty
  87. begin;
  88. insert into t2 select * from t1;
  89. show binlog events from 79;
  90. insert into t1 values(11);
  91. commit;
  92. show binlog events from 79;
  93. # Check that things work like before this BEGIN/ROLLBACK code was added,
  94. # when t2 is INNODB 
  95. alter table t2 engine=INNODB;
  96. delete from t1;
  97. delete from t2;
  98. reset master;
  99. begin;
  100. insert into t1 values(12);
  101. insert into t2 select * from t1;
  102. commit;
  103. show binlog events from 79;
  104. delete from t1;
  105. delete from t2;
  106. reset master;
  107. begin;
  108. insert into t1 values(13);
  109. insert into t2 select * from t1;
  110. rollback;
  111. show binlog events from 79;
  112. delete from t1;
  113. delete from t2;
  114. reset master;
  115. begin;
  116. insert into t1 values(14);
  117. savepoint my_savepoint;
  118. insert into t1 values(15);
  119. insert into t2 select * from t1;
  120. rollback to savepoint my_savepoint;
  121. commit;
  122. show binlog events from 79;
  123. delete from t1;
  124. delete from t2;
  125. reset master;
  126. begin;
  127. insert into t1 values(16);
  128. savepoint my_savepoint;
  129. insert into t1 values(17);
  130. insert into t2 select * from t1;
  131. rollback to savepoint my_savepoint;
  132. insert into t1 values(18);
  133. commit;
  134. select a from t1 order by a; # check that savepoints work :)
  135. show binlog events from 79;
  136. # Test for BUG#5714, where a MyISAM update in the transaction used to
  137. # release row-level locks in InnoDB
  138. connect (con3,localhost,root,,);
  139. connection con3;
  140. delete from t1;
  141. delete from t2;
  142. --disable_warnings
  143. alter table t2 type=MyISAM;
  144. --enable_warnings
  145. insert into t1 values (1);
  146. begin;
  147. select * from t1 for update;
  148. connection con2;
  149. select (@before:=unix_timestamp())*0; # always give repeatable output
  150. begin;
  151. send select * from t1 for update;
  152. connection con3;
  153. insert into t2 values (20);
  154. connection con2;
  155. --error 1205
  156. reap;
  157. select (@after:=unix_timestamp())*0; # always give repeatable output
  158. # verify that innodb_lock_wait_timeout was exceeded. When there was
  159. # the bug, the reap would return immediately after the insert into t2.
  160. select (@after-@before) >= 2;
  161. drop table t1,t2;
  162. commit;
  163. # test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in the middle
  164. # of a transaction
  165. connection con2;
  166. begin;
  167. create temporary table ti (a int) engine=innodb;
  168. rollback;
  169. insert into ti values(1);
  170. set autocommit=0;
  171. create temporary table t1 (a int) engine=myisam; 
  172. commit;
  173. insert t1 values (1); 
  174. rollback;
  175. create table t0 (n int);
  176. insert t0 select * from t1;
  177. set autocommit=1;
  178. insert into t0 select GET_LOCK("lock1",null);
  179. set autocommit=0;
  180. create table t2 (n int) engine=innodb;
  181. insert into t2 values (3); 
  182. disconnect con2;
  183. connection con3;
  184. select get_lock("lock1",60);
  185. show binlog events from 79;
  186. do release_lock("lock1");
  187. drop table t0,t2;
  188. # End of 4.1 tests