mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 22:34:18 +01:00
440 lines
13 KiB
Text
440 lines
13 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
#
|
|
# Uninstall semi-sync plugins on master and slave
|
|
#
|
|
include/stop_slave.inc
|
|
reset slave;
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
reset master;
|
|
set sql_log_bin=0;
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
set sql_log_bin=1;
|
|
#
|
|
# Main test of semi-sync replication start here
|
|
#
|
|
[ on master ]
|
|
[ default state of semi-sync on master should be OFF ]
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled OFF
|
|
[ enable semi-sync on master ]
|
|
set global rpl_semi_sync_master_enabled = 1;
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled ON
|
|
[ status of semi-sync on master should be ON even without any semi-sync slaves ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 0
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
#
|
|
# BUG#45672 Semisync repl: ActiveTranx:insert_tranx_node: transaction node allocation failed
|
|
# BUG#45673 Semisynch reports correct operation even if no slave is connected
|
|
#
|
|
[ status of semi-sync on master should be OFF ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 0
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
#
|
|
# INSTALL PLUGIN semi-sync on slave
|
|
#
|
|
[ on slave ]
|
|
[ default state of semi-sync on slave should be OFF ]
|
|
show variables like 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_slave_enabled OFF
|
|
[ enable semi-sync on slave ]
|
|
set global rpl_semi_sync_slave_enabled = 1;
|
|
show variables like 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_slave_enabled ON
|
|
include/start_slave.inc
|
|
[ on master ]
|
|
[ initial master state after the semi-sync slave connected ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
create table t1(a int) engine = ENGINE_TYPE;
|
|
[ master state after CREATE TABLE statement ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 1
|
|
select CONNECTIONS_NORMAL_SLAVE - CONNECTIONS_NORMAL_SLAVE as 'Should be 0';
|
|
Should be 0
|
|
0
|
|
[ insert records to table ]
|
|
[ master status after inserts ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 301
|
|
[ on slave ]
|
|
[ slave status after replicated inserts ]
|
|
show status like 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status ON
|
|
select count(distinct a) from t1;
|
|
count(distinct a)
|
|
300
|
|
select min(a) from t1;
|
|
min(a)
|
|
1
|
|
select max(a) from t1;
|
|
max(a)
|
|
300
|
|
#
|
|
# Test semi-sync master will switch OFF after one transacton
|
|
# timeout waiting for slave reply.
|
|
#
|
|
include/stop_slave.inc
|
|
[ on master ]
|
|
[ master status should be ON ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 301
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
[ semi-sync replication of these transactions will fail ]
|
|
insert into t1 values (500);
|
|
[ master status should be OFF ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 1
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 301
|
|
insert into t1 values (100);
|
|
[ master status should be OFF ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 302
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 301
|
|
#
|
|
# Test semi-sync status on master will be ON again when slave catches up
|
|
#
|
|
[ on slave ]
|
|
[ slave status should be OFF ]
|
|
show status like 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
include/start_slave.inc
|
|
[ slave status should be ON ]
|
|
show status like 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status ON
|
|
select count(distinct a) from t1;
|
|
count(distinct a)
|
|
2
|
|
select min(a) from t1;
|
|
min(a)
|
|
100
|
|
select max(a) from t1;
|
|
max(a)
|
|
500
|
|
[ on master ]
|
|
[ master status should be ON again after slave catches up ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 302
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 301
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
#
|
|
# Test disable/enable master semi-sync on the fly.
|
|
#
|
|
drop table t1;
|
|
[ on slave ]
|
|
include/stop_slave.inc
|
|
#
|
|
# Flush status
|
|
#
|
|
[ Semi-sync master status variables before FLUSH STATUS ]
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 302
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 302
|
|
FLUSH NO_WRITE_TO_BINLOG STATUS;
|
|
[ Semi-sync master status variables after FLUSH STATUS ]
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
[ on master ]
|
|
show master logs;
|
|
Log_name master-bin.000001
|
|
File_size #
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled ON
|
|
[ disable semi-sync on the fly ]
|
|
set global rpl_semi_sync_master_enabled=0;
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled OFF
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
[ enable semi-sync on the fly ]
|
|
set global rpl_semi_sync_master_enabled=1;
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled ON
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
#
|
|
# Test RESET MASTER/SLAVE
|
|
#
|
|
[ on slave ]
|
|
include/start_slave.inc
|
|
[ on master ]
|
|
create table t1 (a int) engine = ENGINE_TYPE;
|
|
drop table t1;
|
|
show status like 'Rpl_relay%';
|
|
Variable_name Value
|
|
[ test reset master ]
|
|
[ on master]
|
|
reset master;
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
[ on slave ]
|
|
include/stop_slave.inc
|
|
reset slave;
|
|
include/start_slave.inc
|
|
[ on master ]
|
|
create table t1 (a int) engine = ENGINE_TYPE;
|
|
insert into t1 values (1);
|
|
insert into t1 values (2), (3);
|
|
[ on slave ]
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
[ on master ]
|
|
[ master semi-sync status should be ON ]
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 3
|
|
#
|
|
# Start semi-sync replication without SUPER privilege
|
|
#
|
|
include/stop_slave.inc
|
|
reset slave;
|
|
[ on master ]
|
|
reset master;
|
|
set sql_log_bin=0;
|
|
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl';
|
|
flush privileges;
|
|
set sql_log_bin=1;
|
|
[ on slave ]
|
|
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl';
|
|
flush privileges;
|
|
change master to master_user='rpl',master_password='rpl';
|
|
include/start_slave.inc
|
|
show status like 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status ON
|
|
[ on master ]
|
|
[ master semi-sync should be ON ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 0
|
|
insert into t1 values (4);
|
|
insert into t1 values (5);
|
|
[ master semi-sync should be ON ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_no_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_no_tx 0
|
|
show status like 'Rpl_semi_sync_master_yes_tx';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 2
|
|
#
|
|
# Test semi-sync slave connect to non-semi-sync master
|
|
#
|
|
[ on slave ]
|
|
include/stop_slave.inc
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
[ on master ]
|
|
[ Semi-sync status on master should be ON ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 0
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
set global rpl_semi_sync_master_enabled= 0;
|
|
[ on slave ]
|
|
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_slave_enabled ON
|
|
include/start_slave.inc
|
|
[ on master ]
|
|
insert into t1 values (8);
|
|
[ master semi-sync clients should be 1, status should be OFF ]
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
[ on slave ]
|
|
show status like 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status ON
|
|
include/stop_slave.inc
|
|
[ on master ]
|
|
set sql_log_bin=0;
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
set sql_log_bin=1;
|
|
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
[ on slave ]
|
|
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_slave_enabled ON
|
|
include/start_slave.inc
|
|
[ on master ]
|
|
insert into t1 values (10);
|
|
[ on slave ]
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
#
|
|
# Test non-semi-sync slave connect to semi-sync master
|
|
#
|
|
set sql_log_bin=0;
|
|
INSTALL PLUGIN rpl_semi_sync_master SONAME 'SEMISYNC_MASTER_PLUGIN';
|
|
set global rpl_semi_sync_master_timeout= 5000;
|
|
/* 5s */
|
|
set sql_log_bin=1;
|
|
set global rpl_semi_sync_master_enabled= 1;
|
|
[ on slave ]
|
|
include/stop_slave.inc
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
[ uninstall semi-sync slave plugin ]
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
include/start_slave.inc
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
include/stop_slave.inc
|
|
[ reinstall semi-sync slave plugin and disable semi-sync ]
|
|
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'SEMISYNC_SLAVE_PLUGIN';
|
|
set global rpl_semi_sync_slave_enabled= 0;
|
|
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_slave_enabled OFF
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
include/start_slave.inc
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_status OFF
|
|
#
|
|
# Clean up
|
|
#
|
|
include/stop_slave.inc
|
|
UNINSTALL PLUGIN rpl_semi_sync_slave;
|
|
UNINSTALL PLUGIN rpl_semi_sync_master;
|
|
include/start_slave.inc
|
|
drop table t1;
|
|
drop user rpl@127.0.0.1;
|
|
flush privileges;
|