--source include/have_debug_new.inc # default value RESET MASTER; SET @start_global_value = @@global.gtid_mode; SELECT @start_global_value; SET @start_enforce_gtid_consistency= @@global.enforce_gtid_consistency; SET @@global.enforce_gtid_consistency = ON; # # exists as global only # select @@global.gtid_mode; --error ER_INCORRECT_GLOBAL_LOCAL_VAR select @@session.gtid_mode; --error ER_GLOBAL_VARIABLE set gtid_mode = @start_global_value; --error ER_GLOBAL_VARIABLE set @@session.gtid_mode = @start_global_value; show global variables like 'gtid_mode'; show session variables like 'gtid_mode'; --disable_warnings select * from performance_schema.global_variables where variable_name='gtid_mode'; select * from performance_schema.session_variables where variable_name='gtid_mode'; --enable_warnings # # show that it is settable and can only change at most one step at a time # set global gtid_mode = OFF; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = ON_PERMISSIVE; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = ON; set global gtid_mode = OFF_PERMISSIVE; set global gtid_mode = OFF_PERMISSIVE; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = ON; set global gtid_mode = ON_PERMISSIVE; set global gtid_mode = ON_PERMISSIVE; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = OFF; set global gtid_mode = ON; set global gtid_mode = ON; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = OFF; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = OFF_PERMISSIVE; set global gtid_mode = ON_PERMISSIVE; set global gtid_mode = OFF_PERMISSIVE; set global gtid_mode = OFF; --error ER_WRONG_VALUE_FOR_VAR set global gtid_mode = NULL; select @@global.gtid_mode; set global gtid_mode = default; select @@global.gtid_mode; set global gtid_mode = OFF_PERMISSIVE; set global gtid_mode = default; select @@global.gtid_mode; set global gtid_mode = OFF_PERMISSIVE; set global gtid_mode = ON_PERMISSIVE; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = default; select @@global.gtid_mode; set global gtid_mode = ON; --error ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME set global gtid_mode = default; select @@global.gtid_mode; --error ER_GLOBAL_VARIABLE set session gtid_mode = ON; # can't set ON when sql_slave_skip_counter > 0 set global gtid_mode = on_permissive; set global sql_slave_skip_counter = 1; --error ER_CANT_SET_GTID_MODE set global gtid_mode = on; set global sql_slave_skip_counter = 0; set global gtid_mode = on; # can set everything except ON when enforce_gtid_consistency!=ON set global gtid_mode = on_permissive; SET @@global.enforce_gtid_consistency = OFF; set global gtid_mode = off_permissive; set global gtid_mode = off; set global gtid_mode = off_permissive; set global gtid_mode = on_permissive; --error ER_CANT_SET_GTID_MODE set global gtid_mode = on; SET @@global.enforce_gtid_consistency = WARN; set global gtid_mode = off_permissive; set global gtid_mode = off; set global gtid_mode = off_permissive; set global gtid_mode = on_permissive; --error ER_CANT_SET_GTID_MODE set global gtid_mode = on; # # WL6591 Restore backup on existing GTID-aware server - make # GTID_PURGED settable always. # OWNED_GTIDs constraints: in-progress # transactions' gtids must not overlap with the assigned value. # RESET MASTER; --connect (con1,localhost,root,,,,) SET @@GTID_NEXT='11111111-1111-1111-1111-111111111111:1'; BEGIN; --connection default --error ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS SET @@global.gtid_purged= '11111111-1111-1111-1111-111111111111:1-2'; # --error 0 SET @@global.gtid_purged= '11111111-1111-1111-1111-111111111111:2-2'; --error ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS SET @@global.gtid_purged= '+11111111-1111-1111-1111-111111111111:1-1'; # --error 0 SET @@global.gtid_purged= '+11111111-1111-1111-1111-111111111111:3-3'; SELECT @@global.gtid_purged; --connection con1 ROLLBACK; --connection default # test gtid_mode changes with autocommit off CREATE TABLE t1 (a INT); SET AUTOCOMMIT = 0; ## Confirm that gtid_mode cannot be changed when a transaction ## is in progress and gtid_next is set to 'UUID:No'. SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1'; INSERT INTO t1 VALUES (1); # transaction in progress, gtid_mode variable cannot be changed --error ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION SET GLOBAL GTID_MODE = 'off_permissive'; COMMIT; ## Confirm that gtid_mode cannot be changed when gtid_mode is ## set to 'UUID:No'. SET SESSION GTID_NEXT = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:2'; # GTID_NEXT was set, gtid_mode variable cannot be changed --error ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID SET GLOBAL GTID_MODE = 'off_permissive'; COMMIT; ## Confirm that gtid_mode cannot be changed during an anonymous ## transaction. SET GTID_NEXT = 'ANONYMOUS'; --error ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID SET GLOBAL GTID_MODE = 'off_permissive'; COMMIT; # Set back to default and cleanup SET AUTOCOMMIT = 1; SET SESSION GTID_NEXT = 'AUTOMATIC'; DROP TABLE t1; SET GLOBAL GTID_MODE ='off_permissive'; SET GLOBAL GTID_MODE = 'off'; SET @@global.enforce_gtid_consistency = @start_enforce_gtid_consistency; # # See rpl_gtid_mode.test for a comprehensive test case. #