Server IP : 104.21.38.3 / Your IP : 172.68.164.118 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/rpl/t/ |
Upload File : |
# ==== Purpose ==== # # The purpose of this test is to verify that TRUNCATE statement is binary # logged with correct GTID when a replicated memory table is fisrt updated # after a server crash or a server restart. # # ==== Requirements ==== # # R1. When there is a replicated memory table, and the slave crashes, the next # transaction that updates the memory table shall generate a TRUNCATE statement # in the binary log. This test verifies that this works in the below cases: # R1.1. When the update is applied on a replication channel. # R1.2. When the update is applied in a client session having # gtid_next=UUID:NUMBER. # # R2. The TRUNCATE statement shall have a new GTID generated by the slave. # # R3. There shall not be a crash. # # ==== Implementation ==== # # 1. Try to update the memory table on master after restarting the master: # # 1.1. A DML on the memory table # 1.2. A DDL on the memory table. # 1.3. A statement that reads from the memory table. # 1.4. A transaction containing update on the memory table along with other # table updates. # 1.5. A statement containing update on the memory table along with other # table updates. # 1.6. A DML on the memory table applied in a client session having # gtid_next=UUID:NUMBER. # # In each of the above cases: # - Verify that TRUNCATE statement is binary logged on the master. # # 2. Try to update the memory table on master after restarting the slave: # # 2.1. A DML on the memory table # 2.2. A DDL on the memory table. # 2.3. A statement that reads from the memory table # 2.4. A transaction containing update on the memory table along with other # table updates. # 2.5. A statement containing update on the memory table along with other # table updates. # 2.6. A DML on the memory table applied in a client session having # gtid_next=UUID:NUMBER. # # In each of the above cases: # - Verify that TRUNCATE statement is binary logged on the slave. # # ==== References ==== # # Bug#30527929 - RESTART CREATES ANONYMOUS TRANSACTION FOR MEMORY TABLE # --source include/have_gtid.inc --source include/master-slave.inc #Scenario 1 --source include/rpl_connection_master.inc CREATE TABLE mem_t1 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t2 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t3 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t4 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t5 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t6 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t7 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t8 (c1 INT) ENGINE= MEMORY; INSERT INTO mem_t1 VALUES (1), (2), (3), (4); INSERT INTO mem_t2 VALUES (1), (2), (3), (4); INSERT INTO mem_t3 VALUES (1), (2), (3), (4); INSERT INTO mem_t4 VALUES (1), (2), (3), (4); INSERT INTO mem_t5 VALUES (1), (2), (3), (4); INSERT INTO mem_t6 VALUES (1), (2), (3), (4); INSERT INTO mem_t7 VALUES (1), (2), (3), (4); INSERT INTO mem_t8 VALUES (1), (2), (3), (4); --source include/sync_slave_sql_with_master.inc # Restart master --source include/stop_slave.inc --let $rpl_server_number=1 --source include/rpl_restart_server.inc --source include/start_slave.inc --source include/rpl_connection_master.inc --source include/save_binlog_position.inc # Scenario 1.1 INSERT INTO mem_t1 VALUES (1), (2), (3), (4); --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,7 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid # !Begin # !Insert # !Commit --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 1.2 ALTER TABLE mem_t2 ADD COLUMN (c2 INT); --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,4 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid # !Q(ALTER.*) --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 1.3 CREATE TABLE mem_t9 LIKE mem_t3; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,4 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid # !Q(CREATE.*) --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 1.4: BEGIN; INSERT INTO mem_t4 VALUES (1), (2), (3), (4); INSERT INTO mem_t5 VALUES (1), (2), (3), (4); COMMIT; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,14 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid # !Begin # !Insert # !Commit #Gtid # !Q(TRUNCATE.*) #Gtid # !Begin # !Insert # !Commit --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 1.5: UPDATE mem_t6, mem_t7 SET mem_t6.c1 = mem_t6.c1 + 1, mem_t7.c1 = mem_t7.c1 + 1; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,4 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid # !Q(TRUNCATE.*) --source include/assert_binlog_events.inc --source include/save_binlog_position.inc #Scenario 1.6: --let $explicit_gtid=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1 --eval SET @@session.gtid_next = '$explicit_gtid' INSERT INTO mem_t8 VALUES (1), (2), (3), (4); SET @@session.gtid_next = 'AUTOMATIC'; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_master.inc --let $limit= 0,7 --let $event_sequence= #Gtid # !Q(TRUNCATE.*) #Gtid/(.*'$explicit_gtid')# !Begin # !Insert # !Commit --source include/assert_binlog_events.inc # Cleanup DROP TABLE mem_t1, mem_t2, mem_t3, mem_t4, mem_t5, mem_t6, mem_t7, mem_t8, mem_t9; --source include/rpl_reset.inc # Scenario 2: --source include/rpl_connection_master.inc CREATE TABLE mem_t1 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t2 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t3 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t4 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t5 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t6 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t7 (c1 INT) ENGINE= MEMORY; CREATE TABLE mem_t8 (c1 INT) ENGINE= MEMORY; INSERT INTO mem_t1 VALUES (1), (2), (3), (4); INSERT INTO mem_t2 VALUES (1), (2), (3), (4); INSERT INTO mem_t3 VALUES (1), (2), (3), (4); INSERT INTO mem_t4 VALUES (1), (2), (3), (4); INSERT INTO mem_t5 VALUES (1), (2), (3), (4); INSERT INTO mem_t6 VALUES (1), (2), (3), (4); INSERT INTO mem_t7 VALUES (1), (2), (3), (4); INSERT INTO mem_t8 VALUES (1), (2), (3), (4); --source include/sync_slave_sql_with_master.inc # Restart slave --let $rpl_server_number=2 --source include/rpl_restart_server.inc --source include/start_slave.inc --source include/save_binlog_position.inc # Save the UUID of master and slave --source include/rpl_connection_master.inc --let $master_uuid = `SELECT @@global.server_uuid` --source include/rpl_connection_slave.inc --let $slave_uuid = `SELECT @@global.server_uuid` --let $dont_print_pattern = 1 # Scenario 2.1 --source include/rpl_connection_master.inc INSERT INTO mem_t1 VALUES (1), (2), (3), (4); --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 0,7 --let $event_sequence= #Gtid/(.*'$slave_uuid:1') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:17') # !Begin # !Insert # !Commit --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 2.2 --source include/rpl_connection_master.inc ALTER TABLE mem_t2 ADD COLUMN (c2 INT); --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 0,4 --let $event_sequence= #Gtid/(.*'$slave_uuid:2') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:18') # !Q(ALTER.*) --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 2.3 --source include/rpl_connection_master.inc CREATE TABLE mem_t9 LIKE mem_t3; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 0,4 --let $event_sequence= #Gtid/(.*'$slave_uuid:3') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:19') # !Q(CREATE.*) --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 2.4: --source include/rpl_connection_master.inc BEGIN; INSERT INTO mem_t4 VALUES (1), (2), (3), (4); INSERT INTO mem_t5 VALUES (1), (2), (3), (4); COMMIT; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 0,14 --let $event_sequence= #Gtid/(.*'$slave_uuid:4') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:20') # !Begin # !Insert # !Commit #Gtid/(.*'$slave_uuid:5') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:21') # !Begin # !Insert # !Commit --source include/assert_binlog_events.inc --source include/save_binlog_position.inc # Scenario 2.5: --source include/rpl_connection_master.inc DELIMITER |; CREATE FUNCTION f () RETURNS INT BEGIN INSERT INTO mem_t6 VALUES (1); RETURN 2; END| DELIMITER ;| INSERT INTO mem_t7 VALUES (f()); --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 2,12 --let $event_sequence= #Gtid/(.*'$slave_uuid:6') # !Q(TRUNCATE.*) #Gtid/(.*'$slave_uuid:7') # !Q(TRUNCATE.*) #Gtid/(.*'$master_uuid:23') # !Begin # !Multi_DML # !Commit --source include/assert_binlog_events.inc --source include/save_binlog_position.inc #Scenario 2.6: --source include/rpl_connection_master.inc --eval SET @@session.gtid_next = '$explicit_gtid' INSERT INTO mem_t8 VALUES (1), (2), (3), (4); SET @@session.gtid_next = 'AUTOMATIC'; --source include/sync_slave_sql_with_master.inc --source include/rpl_connection_slave.inc --let $limit= 0,7 --let $event_sequence= #Gtid/(.*'$slave_uuid:8') # !Q(TRUNCATE.*) #Gtid/(.*'$explicit_gtid')# !Begin # !Insert # !Commit --source include/assert_binlog_events.inc # Cleanup --source include/rpl_connection_master.inc DROP FUNCTION f; DROP TABLE mem_t1, mem_t2, mem_t3, mem_t4, mem_t5, mem_t6, mem_t7, mem_t8, mem_t9; --let $dont_print_pattern = 0 --source include/rpl_end.inc