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

MySQL数据库

开发平台:

Visual C++

  1.  # This test makes some assumptions about values of thread ids, which should be
  2. # true if the servers have been restarted for this test. So we want to
  3. # stop/restart servers. Note that if assumptions are wrong, the test will not
  4. # fail; it will just fail to test the error-prone scenario.
  5. # Using the manager is the only way to have more than one slave server.
  6. # So you must run this test with --manager.
  7. require_manager;
  8. server_stop master;
  9. server_start master;
  10. server_stop slave;
  11. server_start slave;
  12. # no need for slave_sec (no assumptions on thread ids for this server).
  13. source include/master-slave.inc;
  14. connect (slave_sec,localhost,root,,test,0,slave.sock-1); 
  15. connection master;
  16. save_master_pos;
  17. connection slave;
  18. sync_with_master;
  19. reset master;
  20. save_master_pos;
  21. connection slave_sec;
  22. eval change master to master_host='127.0.0.1',master_port=$SLAVE_MYPORT, master_user='root';
  23. start slave;
  24. sync_with_master;
  25. # :P now we have a chain ready-to-test.
  26. connection master;
  27. create temporary table t1 (a int);
  28. save_master_pos;
  29. connection slave;
  30. sync_with_master;
  31. connection master1;
  32. create temporary table t1 (a int);
  33. save_master_pos;
  34. connection slave;
  35. sync_with_master;
  36. save_master_pos;
  37. # First test:
  38. connection slave_sec;
  39. # Before BUG#1686 ("If 2 master threads with same-name temp table, slave makes
  40. # bad binlog") was fixed, sync_with_master failed
  41. sync_with_master;
  42. show status like 'slave_open_temp_tables';
  43. # 'master' and 'master1' usually have thread id 2-3 or 3-4.
  44. # 'slave' and 'slave1' usually have thread id 2-3.
  45. connection slave;
  46. create temporary table t1 (a int);
  47. connection slave1;
  48. create temporary table t1 (a int);
  49. # So it's likely that in the binlog of slave we get
  50. # server_id=of_master thread_id=3 create temp...
  51. # server_id=of_slave  thread_id=3 create temp...
  52. # which would confuse slave-sec unless slave-sec uses server id to distinguish
  53. # between temp tables (here thread id is obviously not enough to distinguish).
  54. save_master_pos;
  55. # Second test:
  56. connection slave_sec;
  57. # If we did not use the server id to distinguish between temp tables,
  58. # sync_with_master would fail
  59. sync_with_master;
  60. show status like 'slave_open_temp_tables';
  61. # Third test (BUG#1240 "slave of slave breaks when STOP SLAVE was issud on
  62. # parent slave and temp tables").
  63. stop slave;
  64. connection slave;
  65. insert into t1 values(1);
  66. create table t2 as select * from t1;
  67. save_master_pos;
  68. connection slave_sec;
  69. start slave;
  70. sync_with_master;
  71. show status like 'slave_open_temp_tables';
  72. select * from t2;
  73. # clean up
  74. connection slave;
  75. drop table t2;
  76. save_master_pos;
  77. connection slave_sec;
  78. sync_with_master;
  79. # On purpose, we don't delete the temporary tables explicitely.
  80. # So temp tables remain on slave (remember they are not deleted when the slave
  81. # SQL thread terminates). If you run this test with 
  82. # --valgrind --valgrind-options=--show-reachable=yes 
  83. # you will see if they get cleaned up at slave's shutdown (that is, if the
  84. # memory they use is freed (it should) by mysqld before it terminates).
  85. # If they wouldn't be cleaned up, you would see some "still reachable" blocks in
  86. # Valgrind.
  87. # End of 4.1 tests