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

MySQL数据库

开发平台:

Visual C++

  1. ######################## rpl_ddl.test ########################
  2. #                                                            #
  3. # DDL statements (sometimes with implicit COMMIT) executed   #
  4. # by the master and it's propagation into the slave          #
  5. #                                                            #
  6. ##############################################################
  7. #
  8. # NOTE, PLEASE BE CAREFUL, WHEN MODIFYING THE TESTS !!
  9. #
  10. #      1. !All! objects to be dropped, renamed, altered ... must be created
  11. #         in AUTOCOMMIT= 1 mode before AUTOCOMMIT is set to 0 and the test
  12. #         sequences start.
  13. #
  14. #      2. Never use a test object, which was direct or indirect affected by a
  15. #         preceeding test sequence again.
  16. #         Except table d1.t1 where ONLY DML is allowed.
  17. #
  18. #         If one preceeding test sequence hits a (sometimes not good visible,
  19. #         because the sql error code of the statement might be 0) bug
  20. #         and these rules are ignored, a following test sequence might earn ugly
  21. #         effects like failing 'sync_slave_with_master', crashes of the slave or
  22. #         abort of the test case etc..
  23. #
  24. #      3. The assignment of the DDL command to be tested to $my_stmt can
  25. #         be a bit difficult. "'" must be avoided, because the test
  26. #         routine "include/rpl_stmt_seq.inc" performs a
  27. #         eval SELECT CONCAT('######## ','$my_stmt','  ########') as "";
  28. #
  29. --source include/have_innodb.inc
  30. --source include/master-slave.inc
  31. ###############################################################
  32. # Some preparations
  33. ###############################################################
  34. SET AUTOCOMMIT = 1;
  35. #
  36. # 1. DROP all objects, which probably already exist, but must be created here
  37. #
  38. --disable_warnings
  39. DROP DATABASE IF EXISTS mysqltest1;
  40. DROP DATABASE IF EXISTS mysqltest2;
  41. DROP DATABASE IF EXISTS mysqltest3;
  42. --enable_warnings
  43. #
  44. # 2. CREATE all objects needed
  45. #    working database is mysqltest1
  46. #    working (transactional!) is mysqltest1.t1 
  47. #
  48. CREATE DATABASE mysqltest1;
  49. CREATE DATABASE mysqltest2;
  50. CREATE TABLE mysqltest1.t1 (f1 BIGINT) ENGINE= "InnoDB";
  51. INSERT INTO mysqltest1.t1 SET f1= 0;
  52. CREATE TABLE mysqltest1.t2 (f1 BIGINT) ENGINE= "InnoDB";
  53. CREATE TABLE mysqltest1.t3 (f1 BIGINT) ENGINE= "InnoDB";
  54. CREATE TABLE mysqltest1.t4 (f1 BIGINT) ENGINE= "InnoDB";
  55. CREATE TABLE mysqltest1.t5 (f1 BIGINT) ENGINE= "InnoDB";
  56. CREATE TABLE mysqltest1.t6 (f1 BIGINT) ENGINE= "InnoDB";
  57. CREATE INDEX my_idx6 ON mysqltest1.t6(f1);
  58. CREATE TABLE mysqltest1.t7 (f1 BIGINT) ENGINE= "InnoDB";
  59. INSERT INTO mysqltest1.t7 SET f1= 0;
  60. CREATE TABLE mysqltest1.t8 (f1 BIGINT) ENGINE= "InnoDB";
  61. CREATE TABLE mysqltest1.t9 (f1 BIGINT) ENGINE= "InnoDB";
  62. CREATE TABLE mysqltest1.t10 (f1 BIGINT) ENGINE= "InnoDB";
  63. CREATE TABLE mysqltest1.t11 (f1 BIGINT) ENGINE= "InnoDB";
  64. CREATE TABLE mysqltest1.t12 (f1 BIGINT) ENGINE= "InnoDB";
  65. CREATE TABLE mysqltest1.t13 (f1 BIGINT) ENGINE= "InnoDB";
  66. CREATE TABLE mysqltest1.t14 (f1 BIGINT) ENGINE= "InnoDB";
  67. CREATE TABLE mysqltest1.t15 (f1 BIGINT) ENGINE= "InnoDB";
  68. CREATE TABLE mysqltest1.t16 (f1 BIGINT) ENGINE= "InnoDB";
  69. CREATE TABLE mysqltest1.t17 (f1 BIGINT) ENGINE= "InnoDB";
  70. CREATE TABLE mysqltest1.t18 (f1 BIGINT) ENGINE= "InnoDB";
  71. CREATE TABLE mysqltest1.t19 (f1 BIGINT) ENGINE= "InnoDB";
  72. CREATE TEMPORARY TABLE mysqltest1.t23 (f1 BIGINT);
  73. #
  74. # 3. master sessions: never do AUTOCOMMIT
  75. #    slave  sessions: never do AUTOCOMMIT
  76. #
  77. SET AUTOCOMMIT = 0;
  78. use mysqltest1;
  79. sync_slave_with_master;
  80. connection slave;
  81. --disable_query_log
  82. SELECT '-------- switch to slave --------' as "";
  83. --enable_query_log
  84. SET AUTOCOMMIT = 0;
  85. use mysqltest1;
  86. connection master;
  87. --disable_query_log
  88. SELECT '-------- switch to master -------' as "";
  89. --enable_query_log
  90. # We don't want to abort the whole test if one statement sent
  91. # to the server gets an error, because the following test
  92. # sequences are nearly independend of the previous statements. 
  93. --disable_abort_on_error
  94. ###############################################################
  95. # Banal case: (explicit) COMMIT and ROLLBACK
  96. # Just for checking if the test sequence is usable
  97. ###############################################################
  98. let $my_stmt= COMMIT;
  99. let $my_master_commit= true;
  100. let $my_slave_commit= true;
  101. --source include/rpl_stmt_seq.inc
  102. let $my_stmt= ROLLBACK;
  103. let $my_master_commit= false;
  104. let $my_slave_commit= false;
  105. --source include/rpl_stmt_seq.inc
  106. ###############################################################
  107. # Cases with commands very similar to COMMIT
  108. ###############################################################
  109. let $my_stmt= SET AUTOCOMMIT=1;
  110. let $my_master_commit= true;
  111. let $my_slave_commit= true;
  112. --source include/rpl_stmt_seq.inc
  113. SET AUTOCOMMIT=0;
  114. let $my_stmt= START TRANSACTION;
  115. let $my_master_commit= true;
  116. let $my_slave_commit= true;
  117. --source include/rpl_stmt_seq.inc
  118. let $my_stmt= BEGIN;
  119. let $my_master_commit= true;
  120. let $my_slave_commit= true;
  121. --source include/rpl_stmt_seq.inc
  122. ###############################################################
  123. # Cases with (BASE) TABLES and (UPDATABLE) VIEWs
  124. ###############################################################
  125. let $my_stmt= DROP TABLE mysqltest1.t2;
  126. let $my_master_commit= true;
  127. let $my_slave_commit= true;
  128. --source include/rpl_stmt_seq.inc
  129. SHOW TABLES LIKE 't2';
  130. connection slave;
  131. --disable_query_log
  132. SELECT '-------- switch to slave --------' as "";
  133. --enable_query_log
  134. SHOW TABLES LIKE 't2';
  135. connection master;
  136. --disable_query_log
  137. SELECT '-------- switch to master -------' as "";
  138. --enable_query_log
  139. # Note: Since this test is executed with a skip-innodb slave, the
  140. # slave incorrectly commits the insert.  One can *not* have InnoDB on
  141. # master and MyISAM on slave and expect that a transactional rollback
  142. # after a CREATE TEMPORARY TABLE should work correctly on the slave.
  143. # For this to work properly the handler on the slave must be able to 
  144. # handle transactions (e.g. InnoDB or NDB).
  145. let $my_stmt= DROP TEMPORARY TABLE mysqltest1.t23;
  146. let $my_master_commit= false;
  147. let $my_slave_commit= true;
  148. --source include/rpl_stmt_seq.inc
  149. SHOW TABLES LIKE 't23';
  150. connection slave;
  151. --disable_query_log
  152. SELECT '-------- switch to slave --------' as "";
  153. --enable_query_log
  154. SHOW TABLES LIKE 't23';
  155. connection master;
  156. --disable_query_log
  157. SELECT '-------- switch to master -------' as "";
  158. --enable_query_log
  159. let $my_stmt= RENAME TABLE mysqltest1.t3 to mysqltest1.t20;
  160. let $my_master_commit= true;
  161. let $my_slave_commit= true;
  162. --source include/rpl_stmt_seq.inc
  163. SHOW TABLES LIKE 't20';
  164. connection slave;
  165. --disable_query_log
  166. SELECT '-------- switch to slave --------' as "";
  167. --enable_query_log
  168. SHOW TABLES LIKE 't20';
  169. connection master;
  170. --disable_query_log
  171. SELECT '-------- switch to master -------' as "";
  172. --enable_query_log
  173. let $my_stmt= ALTER TABLE mysqltest1.t4 ADD column f2 BIGINT;
  174. let $my_master_commit= true;
  175. let $my_slave_commit= true;
  176. --source include/rpl_stmt_seq.inc
  177. describe mysqltest1.t4;
  178. connection slave;
  179. --disable_query_log
  180. SELECT '-------- switch to slave --------' as "";
  181. --enable_query_log
  182. describe mysqltest1.t4;
  183. connection master;
  184. --disable_query_log
  185. SELECT '-------- switch to master -------' as "";
  186. --enable_query_log
  187. let $my_stmt= CREATE TABLE mysqltest1.t21 (f1 BIGINT) ENGINE= "InnoDB";
  188. let $my_master_commit= true;
  189. let $my_slave_commit= true;
  190. --source include/rpl_stmt_seq.inc
  191. # Note: Since this test is executed with a skip-innodb slave, the
  192. # slave incorrectly commits the insert.  One can *not* have InnoDB on
  193. # master and MyISAM on slave and expect that a transactional rollback
  194. # after a CREATE TEMPORARY TABLE should work correctly on the slave.
  195. # For this to work properly the handler on the slave must be able to 
  196. # handle transactions (e.g. InnoDB or NDB).
  197. let $my_stmt= CREATE TEMPORARY TABLE mysqltest1.t22 (f1 BIGINT);
  198. let $my_master_commit= false;
  199. let $my_slave_commit= true;
  200. --source include/rpl_stmt_seq.inc
  201. let $my_stmt= TRUNCATE TABLE mysqltest1.t7;
  202. let $my_master_commit= true;
  203. let $my_slave_commit= true;
  204. --source include/rpl_stmt_seq.inc
  205. SELECT * FROM mysqltest1.t7;
  206. connection slave;
  207. --disable_query_log
  208. SELECT '-------- switch to slave --------' as "";
  209. --enable_query_log
  210. SELECT * FROM mysqltest1.t7;
  211. connection master;
  212. --disable_query_log
  213. SELECT '-------- switch to master -------' as "";
  214. --enable_query_log
  215. ###############################################################
  216. # Cases with LOCK/UNLOCK
  217. ###############################################################
  218. # MySQL insists in locking mysqltest1.t1, because rpl_stmt_seq performs an
  219. # INSERT into this table.
  220. let $my_stmt= LOCK TABLES mysqltest1.t1 WRITE, mysqltest1.t8 READ;
  221. let $my_master_commit= true;
  222. let $my_slave_commit= true;
  223. --source include/rpl_stmt_seq.inc
  224. UNLOCK TABLES;
  225. # No prior locking
  226. let $my_stmt= UNLOCK TABLES;
  227. let $my_master_commit= false;
  228. let $my_slave_commit= false;
  229. --source include/rpl_stmt_seq.inc
  230. # With prior read locking
  231. # Note that this test generate an error since the rpl_stmt_seq.inc
  232. # tries to insert into t1.
  233. LOCK TABLES mysqltest1.t1 READ;
  234. let $my_stmt= UNLOCK TABLES;
  235. let $my_master_commit= false;
  236. let $my_slave_commit= false;
  237. --source include/rpl_stmt_seq.inc
  238. # With prior write locking
  239. LOCK TABLES mysqltest1.t1 WRITE, mysqltest1.t8 READ;
  240. let $my_stmt= UNLOCK TABLES;
  241. let $my_master_commit= true;
  242. let $my_slave_commit= true;
  243. --source include/rpl_stmt_seq.inc
  244. ###############################################################
  245. # Cases with INDEXES
  246. ###############################################################
  247. let $my_stmt= DROP INDEX my_idx6 ON mysqltest1.t6;
  248. let $my_master_commit= true;
  249. let $my_slave_commit= true;
  250. --source include/rpl_stmt_seq.inc
  251. SHOW INDEX FROM mysqltest1.t6;
  252. connection slave;
  253. --disable_query_log
  254. SELECT '-------- switch to slave --------' as "";
  255. --enable_query_log
  256. SHOW INDEX FROM mysqltest1.t6;
  257. connection master;
  258. --disable_query_log
  259. SELECT '-------- switch to master -------' as "";
  260. --enable_query_log
  261. let $my_stmt= CREATE INDEX my_idx5 ON mysqltest1.t5(f1);
  262. let $my_master_commit= true;
  263. let $my_slave_commit= true;
  264. --source include/rpl_stmt_seq.inc
  265. SHOW INDEX FROM mysqltest1.t5;
  266. connection slave;
  267. --disable_query_log
  268. SELECT '-------- switch to slave --------' as "";
  269. --enable_query_log
  270. SHOW INDEX FROM mysqltest1.t5;
  271. connection master;
  272. --disable_query_log
  273. SELECT '-------- switch to master -------' as "";
  274. --enable_query_log
  275. ###############################################################
  276. # Cases with DATABASE
  277. ###############################################################
  278. let $my_stmt= DROP DATABASE mysqltest2;
  279. let $my_master_commit= true;
  280. let $my_slave_commit= true;
  281. --source include/rpl_stmt_seq.inc
  282. SHOW DATABASES LIKE "mysqltest2";
  283. connection slave;
  284. --disable_query_log
  285. SELECT '-------- switch to slave --------' as "";
  286. --enable_query_log
  287. SHOW DATABASES LIKE "mysqltest2";
  288. connection master;
  289. --disable_query_log
  290. SELECT '-------- switch to master -------' as "";
  291. --enable_query_log
  292. let $my_stmt= CREATE DATABASE mysqltest3;
  293. let $my_master_commit= true;
  294. let $my_slave_commit= true;
  295. --source include/rpl_stmt_seq.inc
  296. SHOW DATABASES LIKE "mysqltest3";
  297. connection slave;
  298. --disable_query_log
  299. SELECT '-------- switch to slave --------' as "";
  300. --enable_query_log
  301. SHOW DATABASES LIKE "mysqltest3";
  302. connection master;
  303. --disable_query_log
  304. SELECT '-------- switch to master -------' as "";
  305. --enable_query_log
  306. ###############################################################
  307. # Cleanup
  308. ###############################################################
  309. --disable_warnings
  310. DROP DATABASE IF EXISTS mysqltest1;
  311. DROP DATABASE IF EXISTS mysqltest2;
  312. DROP DATABASE IF EXISTS mysqltest3;
  313. --enable_warnings
  314. # End of 4.1 tests