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

MySQL数据库

开发平台:

Visual C++

  1. #
  2. # Test is run with max_binlog_size=2048 to force automatic rotation of the
  3. # binary log
  4. # Tests done:
  5. # - Check that slaves reports correct failures if master.info has strange
  6. #   modes/information
  7. # - Automatic binary log rotation
  8. # - Ensure that temporary tables works over flush logs and binary log
  9. #   changes
  10. # - Test creating a duplicate key error and recover from it
  11. connect (master,localhost,root,,test,$MASTER_MYPORT,master.sock);
  12. --disable_warnings
  13. drop table if exists t1, t2, t3, t4;
  14. --enable_warnings
  15. connect (slave,localhost,root,,test,$SLAVE_MYPORT,slave.sock);
  16. system cat /dev/null > var/slave-data/master.info;
  17. system chmod 000 var/slave-data/master.info;
  18. connection slave;
  19. --disable_warnings
  20. drop table if exists t1, t2, t3, t4;
  21. --enable_warnings
  22. # START SLAVE will fail because it can't read the file (mode 000)
  23. # (system error 13)
  24. --error 1201
  25. start slave;
  26. system chmod 600 var/slave-data/master.info;
  27. # It will fail again because the file is empty so the slave cannot get valuable
  28. # info about how to connect to the master from it (failure in
  29. # init_strvar_from_file() in init_master_info()).
  30. --error 1201
  31. start slave;
  32. --replace_result $MASTER_MYPORT MASTER_PORT
  33. # CHANGE MASTER will fail because it first parses master.info before changing
  34. # it (so when master.info is bad, people have to use RESET SLAVE first).
  35. --error 1201
  36. eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root';
  37. reset slave;
  38. --replace_result $MASTER_MYPORT MASTER_PORT
  39. eval change master to master_host='127.0.0.1',master_port=$MASTER_MYPORT, master_user='root'; 
  40. connection master;
  41. reset master;
  42. connection slave;
  43. start slave;
  44. connection master;
  45. #
  46. # Test FLUSH LOGS
  47. #
  48. create temporary table temp_table (a char(80) not null);
  49. insert into temp_table values ("testing temporary tables");
  50. create table t1 (s text);
  51. insert into t1 values('Could not break slave'),('Tried hard');
  52. sync_slave_with_master;
  53. --replace_result $MASTER_MYPORT MASTER_PORT
  54. --replace_column 1 # 33 #
  55. show slave status;
  56. select * from t1;
  57. connection master;
  58. flush logs;
  59. create table t2(m int not null auto_increment primary key);
  60. insert into t2 values (34),(67),(123);
  61. flush logs;
  62. show binary logs;
  63. create table t3 select * from temp_table;
  64. sync_slave_with_master;
  65. select * from t3;
  66. connection master;
  67. drop table temp_table, t3;
  68. #
  69. # Now lets make some duplicate key mess and see if we can recover from it
  70. #
  71. # First insert a value on the slave
  72. connection slave;
  73. insert into t2 values(1234);
  74. #same value on the master
  75. connection master;
  76. set insert_id=1234;
  77. insert into t2 values(NULL);
  78. connection slave;
  79. wait_for_slave_to_stop;
  80. #restart slave skipping one event
  81. set global sql_slave_skip_counter=1;
  82. start slave;
  83. connection master;
  84. #let slave catch up
  85. sync_slave_with_master;
  86. connection master;
  87. purge master logs to 'master-bin.000002';
  88. show master logs;
  89. # we just tests if synonyms are accepted
  90. purge binary logs to 'master-bin.000002';
  91. show binary logs;
  92. # sleeping 10 seconds or more would make the slave believe connection is down
  93. --real_sleep 1
  94. purge master logs before now();
  95. show binary logs;
  96. insert into t2 values (65);
  97. sync_slave_with_master;
  98. --replace_result $MASTER_MYPORT MASTER_PORT
  99. --replace_column 1 # 33 #
  100. show slave status;
  101. select * from t2;
  102. #
  103. # Test forcing the replication log to rotate
  104. connection master;
  105. create temporary table temp_table (a char(80) not null);
  106. insert into temp_table values ("testing temporary tables part 2");
  107. let $1=100;
  108. create table t3 (n int);
  109. disable_query_log;
  110. while ($1)
  111. {
  112. #eval means expand $ expressions
  113.  eval insert into t3 values($1 + 4);
  114.  dec $1;
  115. }
  116. enable_query_log;
  117. select count(*) from t3 where n >= 4;
  118. create table t4 select * from temp_table;
  119. show binary logs;
  120. show master status;
  121. save_master_pos;
  122. connection slave;
  123. sync_with_master;
  124. select * from t4;
  125. --replace_result $MASTER_MYPORT MASTER_PORT
  126. --replace_column 1 # 33 #
  127. show slave status;
  128. # because of concurrent insert, the table may not be up to date
  129. # if we do not lock
  130. lock tables t3 read;
  131. select count(*) from t3 where n >= 4;
  132. unlock tables;
  133. #clean up
  134. connection master;
  135. drop table if exists t1,t2,t3,t4;
  136. sync_slave_with_master;
  137. # End of 4.1 tests