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

MySQL数据库

开发平台:

Visual C++

  1. # include/rpl_stmt_seq.inc
  2. #
  3. # Please be very careful when editing this routine, because the handling of 
  4. # the $variables is extreme sensitive. 
  5. #
  6. ###############################################################
  7. # Debug options : To debug this test script
  8. ###############################################################
  9. let $showbinlog= 0;
  10. let $manipulate= 1;
  11. ######## The typical test sequence
  12. # 1. INSERT without commit
  13. #    check table content of master and slave
  14. # 2. EXECUTE the statement
  15. #    check table content of master and slave
  16. # 3. ROLLBACK
  17. #    check table content of master and slave
  18. # 4. flush the logs
  19. let $VERSION=`select version()`;
  20. --disable_query_log
  21. # SELECT '######## new test sequence ########' as "";
  22. eval SELECT CONCAT('######## ','$my_stmt','  ########') as "";
  23. --enable_query_log
  24. ###############################################################
  25. # Predict the number of the current log
  26. ###############################################################
  27. # Disable the logging of the log number computation. 
  28. --disable_query_log
  29. # $_log_num_n should contain the number of the current binlog in numeric style.
  30. # If this routine is called for the first time, $_log_num will not initialized
  31. # and contain the value '' instead of '1'. So we will correct it here.
  32. #
  33. eval set @aux= IF('$_log_num_n' = '', '1', '$_log_num_n');
  34. let $_log_num_n= `SELECT @aux`;
  35. eval set @aux= LPAD('$_log_num_n',6,'0');
  36. #              SELECT @aux AS "@aux is";
  37. #
  38. # $_log_num_s should contain the number of the current binlog in string style.
  39. let $_log_num_s= `select @aux`;
  40. # eval SELECT '$log_num' ;
  41. --enable_query_log
  42. ###############################################################
  43. # INSERT 
  44. ###############################################################
  45. connection master;
  46. --disable_query_log
  47. SELECT '-------- switch to master -------' as "";
  48. --enable_query_log
  49. # Maybe it would be smarter to use a table with autoincrement column.
  50. let $MAX= `SELECT MAX(f1) FROM t1` ;
  51. eval INSERT INTO t1 SET f1= $MAX + 1;
  52. # results before DDL(to be tested)
  53. SELECT MAX(f1) FROM t1;
  54. if ($show_binlog)
  55. {
  56. --replace_result $VERSION VERSION
  57. --replace_column 2 # 5 #
  58. eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
  59. }
  60. sync_slave_with_master;
  61. connection slave;
  62. --disable_query_log
  63. SELECT '-------- switch to slave --------' as "";
  64. --enable_query_log
  65. # results before DDL(to be tested)
  66. SELECT MAX(f1) FROM t1;
  67. if ($show_binlog)
  68. {
  69. --replace_result $VERSION VERSION
  70. --replace_column 2 # 5 #
  71. eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
  72. }
  73. ###############################################################
  74. # command to be tested
  75. ###############################################################
  76. connection master;
  77. --disable_query_log
  78. SELECT '-------- switch to master -------' as "";
  79. --enable_query_log
  80. eval $my_stmt;
  81. # Devaluate $my_stmt, to detect script bugs
  82. let $my_stmt= ERROR: YOU FORGOT TO FILL IN THE STATEMENT;
  83. # results after DDL(to be tested)
  84. SELECT MAX(f1) FROM t1;
  85. if ($show_binlog)
  86. {
  87. --replace_result $VERSION VERSION
  88. --replace_column 2 # 5 #
  89. eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
  90. }
  91. sync_slave_with_master;
  92. connection slave;
  93. --disable_query_log
  94. SELECT '-------- switch to slave --------' as "";
  95. --enable_query_log
  96. # results after DDL(to be tested)
  97. SELECT MAX(f1) FROM t1;
  98. if ($show_binlog)
  99. {
  100. --replace_result $VERSION VERSION
  101. --replace_column 2 # 5 #
  102. eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
  103. }
  104. ###############################################################
  105. # ROLLBACK
  106. ###############################################################
  107. connection master;
  108. --disable_query_log
  109. SELECT '-------- switch to master -------' as "";
  110. --enable_query_log
  111. ROLLBACK;
  112. # results after final ROLLBACK
  113. SELECT MAX(f1) FROM t1;
  114. # Try to detect if the DDL command caused that the INSERT is committed
  115. # $MAX holds the highest/last value just before the insert of MAX + 1
  116. --disable_query_log
  117. eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
  118.                IF(MAX(f1) = $MAX + 1, 'committed', 'not committed')),
  119.                IF((MAX(f1) = $MAX + 1) XOR NOT $my_master_commit,
  120.                 ' (Succeeded)',
  121.                 ' (Failed)')) AS "" 
  122.                FROM mysqltest1.t1;
  123. --enable_query_log
  124. if ($show_binlog)
  125. {
  126. --replace_result $VERSION VERSION
  127. --replace_column 2 # 5 #
  128. eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
  129. }
  130. sync_slave_with_master;
  131. connection slave;
  132. --disable_query_log
  133. SELECT '-------- switch to slave --------' as "";
  134. --enable_query_log
  135. # results after final ROLLBACK
  136. SELECT MAX(f1) FROM t1;
  137. --disable_query_log
  138. eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE:  The INSERT is ',
  139.                IF(MAX(f1) = $MAX + 1, 'committed', 'not committed')),
  140.                IF((MAX(f1) = $MAX + 1) XOR NOT $my_slave_commit,
  141.                 ' (Succeeded)',
  142.                 ' (Failed)')) AS "" 
  143.                FROM mysqltest1.t1;
  144. --enable_query_log
  145. if ($show_binlog)
  146. {
  147. --replace_result $VERSION VERSION
  148. --replace_column 2 # 5 #
  149. eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
  150. }
  151. ###############################################################
  152. # Manipulate binlog
  153. ###############################################################
  154. if ($manipulate)
  155. {
  156. #### Manipulate the binary logs,
  157. # so that the output of SHOW BINLOG EVENTS IN <current log>
  158. # contains only commands of the current test sequence.
  159. # - flush the master and the slave log
  160. #   ---> both start to write into new logs with incremented number
  161. # - increment $_log_num_n
  162. connection master;
  163. --disable_query_log
  164. SELECT '-------- switch to master -------' as "";
  165. --enable_query_log
  166. flush logs;
  167. # sleep 1;
  168. # eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
  169. sync_slave_with_master;
  170. connection slave;
  171. --disable_query_log
  172. SELECT '-------- switch to slave --------' as "";
  173. --enable_query_log
  174. # the final content of the binary log
  175. flush logs;
  176. # The next sleep is urgent needed.
  177. # Without this sleep the slaves crashes often, when the SHOW BINLOG
  178. # is executed.   :-(
  179. # sleep 1;
  180. # eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
  181. inc $_log_num_n;
  182. }
  183. connection master;
  184. --disable_query_log
  185. SELECT '-------- switch to master -------' as "";
  186. --enable_query_log