1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
include/master-slave.inc
[connection master]
connection slave;
SET @old_debug_slave= @@global.debug_dbug;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=4;
set global slave_parallel_mode=optimistic;
set global gtid_strict_mode=1;
set global debug_dbug="+d,rpl_slave_stop_CA_before_binlog";
include/start_slave.inc
connection master;
SET @old_debug_master= @@global.debug_dbug;
set global debug_dbug="+d,start_alter_delay_master";
set global binlog_alter_two_phase=true;
create table t1( a int primary key, b int) engine=myisam;
create table t2( a int primary key, b int) engine=myisam;
connect con1,localhost,root,,;
alter table t1 add column c int;;
connection master;
# Get into binlog first and wait
# master gtid state is 0-1-3
connect con2,localhost,root,,;
alter table t2 add column c int;;
connection master;
# Get into binlog next and wait as well
# master gtid state is 0-1-4
set DEBUG_SYNC= "now signal alter_cont";
connection con1;
connection con2;
create table t3( a int primary key, b int) engine=innodb;
# master gtid state is 0-1-7
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
master-bin.000001 # Gtid_list 1 # []
master-bin.000001 # Binlog_checkpoint 1 # master-bin.000001
master-bin.000001 # Gtid 1 # GTID #-#-#
master-bin.000001 # Query 1 # use `test`; create table t1( a int primary key, b int) engine=myisam
master-bin.000001 # Gtid 1 # GTID #-#-#
master-bin.000001 # Query 1 # use `test`; create table t2( a int primary key, b int) engine=myisam
master-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
master-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
master-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
master-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
master-bin.000001 # Gtid 1 # GTID #-#-# COMMIT ALTER id=<seq_no>
master-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
master-bin.000001 # Gtid 1 # GTID #-#-# COMMIT ALTER id=<seq_no>
master-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
master-bin.000001 # Gtid 1 # GTID #-#-#
master-bin.000001 # Query 1 # use `test`; create table t3( a int primary key, b int) engine=innodb
# Stop Slave
# As master binlog is SA SA CA CA
# let's stop at first CA processing (in process_commit_alter)
connection slave;
include/sync_with_master_gtid.inc
# wait for CA_1 waiting itself
connect extra_slave,127.0.0.1,root,,test,$SLAVE_MYPORT;
stop slave;;
connection slave;
connection extra_slave;
SET GLOBAL debug_dbug= @old_debug_slave;
connection slave;
include/wait_for_slave_sql_to_stop.inc
# The list of events after the slave has stopped must have just one CA:
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid_list 2 # []
slave-bin.000001 # Binlog_checkpoint 2 # slave-bin.000001
slave-bin.000001 # Gtid 1 # GTID #-#-#
slave-bin.000001 # Query 1 # use `test`; create table t1( a int primary key, b int) engine=myisam
slave-bin.000001 # Gtid 1 # GTID #-#-#
slave-bin.000001 # Query 1 # use `test`; create table t2( a int primary key, b int) engine=myisam
slave-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-# COMMIT ALTER id=<seq_no>
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
select domain_id, seq_no from mysql.gtid_slave_pos order by seq_no desc limit 1;
domain_id seq_no
0 5
include/start_slave.inc
connection master;
include/save_master_gtid.inc
connection slave;
include/sync_with_master_gtid.inc
# Everything from the master binlog must have been applied now:
select domain_id, seq_no from mysql.gtid_slave_pos order by seq_no desc limit 1;
domain_id seq_no
0 7
# slave gtid state is 0-1-7
# The list of events after the slave has synchronized must have both CA:
show binlog events from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
slave-bin.000001 # Gtid_list 2 # []
slave-bin.000001 # Binlog_checkpoint 2 # slave-bin.000001
slave-bin.000001 # Gtid 1 # GTID #-#-#
slave-bin.000001 # Query 1 # use `test`; create table t1( a int primary key, b int) engine=myisam
slave-bin.000001 # Gtid 1 # GTID #-#-#
slave-bin.000001 # Query 1 # use `test`; create table t2( a int primary key, b int) engine=myisam
slave-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-# START ALTER
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-# COMMIT ALTER id=<seq_no>
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-# COMMIT ALTER id=<seq_no>
slave-bin.000001 # Query 1 # use `test`; alter table <t> add column c int
slave-bin.000001 # Gtid 1 # GTID #-#-#
slave-bin.000001 # Query 1 # use `test`; create table t3( a int primary key, b int) engine=innodb
connection master;
drop table t1,t2,t3;
set global binlog_alter_two_phase = 0;
SET GLOBAL debug_dbug= @old_debug_master;
set DEBUG_SYNC= 'RESET';
connection slave;
include/stop_slave.inc
set global slave_parallel_threads = 0;;
set global slave_parallel_mode = optimistic;;
set global gtid_strict_mode = 0;;
set DEBUG_SYNC= 'RESET';
include/start_slave.inc
include/rpl_end.inc
|