Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
6799db25
Commit
6799db25
authored
Sep 30, 2009
by
He Zhenxing
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Back porting the test case for semi-sync
parent
623ed58c
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
932 additions
and
0 deletions
+932
-0
mysql-test/include/have_semisync_plugin.inc
mysql-test/include/have_semisync_plugin.inc
+15
-0
mysql-test/suite/rpl/r/rpl_semi_sync.result
mysql-test/suite/rpl/r/rpl_semi_sync.result
+398
-0
mysql-test/suite/rpl/t/rpl_semi_sync-master.opt
mysql-test/suite/rpl/t/rpl_semi_sync-master.opt
+1
-0
mysql-test/suite/rpl/t/rpl_semi_sync-slave.opt
mysql-test/suite/rpl/t/rpl_semi_sync-slave.opt
+1
-0
mysql-test/suite/rpl/t/rpl_semi_sync.test
mysql-test/suite/rpl/t/rpl_semi_sync.test
+517
-0
No files found.
mysql-test/include/have_semisync_plugin.inc
0 → 100644
View file @
6799db25
#
# Check if dynamic loading is supported
#
--
require
r
/
have_dynamic_loading
.
require
disable_query_log
;
show
variables
like
'have_dynamic_loading'
;
enable_query_log
;
#
# Check if the variable SEMISYNC_MASTER_PLUGIN is set
#
if
(
`select LENGTH('$SEMISYNC_MASTER_PLUGIN') = 0`
)
{
skip
Need
semisync
plugins
;
}
mysql-test/suite/rpl/r/rpl_semi_sync.result
0 → 100644
View file @
6799db25
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 OFF 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 OFF
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(n 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
[ 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 n) from t1;
count(distinct n)
300
select min(n) from t1;
min(n)
1
select max(n) from t1;
max(n)
300
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);
delete from t1 where n < 500;
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 3
show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value
Rpl_semi_sync_master_yes_tx 301
[ 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 n) from t1;
count(distinct n)
2
select min(n) from t1;
min(n)
100
select max(n) from t1;
max(n)
500
[ on master ]
[ do something to activate semi-sync ]
drop table t1;
[ master status should be ON again ]
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 3
show status like 'Rpl_semi_sync_master_yes_tx';
Variable_name Value
Rpl_semi_sync_master_yes_tx 302
show status like 'Rpl_semi_sync_master_clients';
Variable_name Value
Rpl_semi_sync_master_clients 1
[ on slave ]
include/stop_slave.inc
[ 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
[ 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 OFF
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 0, status 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
[ on slave ]
show status like 'Rpl_semi_sync_slave_status';
Variable_name Value
Rpl_semi_sync_slave_status OFF
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 'libsemisync_master.so';
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 'libsemisync_slave.so';
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;
mysql-test/suite/rpl/t/rpl_semi_sync-master.opt
0 → 100644
View file @
6799db25
$SEMISYNC_PLUGIN_OPT
mysql-test/suite/rpl/t/rpl_semi_sync-slave.opt
0 → 100644
View file @
6799db25
$SEMISYNC_PLUGIN_OPT
mysql-test/suite/rpl/t/rpl_semi_sync.test
0 → 100644
View file @
6799db25
source
include
/
have_semisync_plugin
.
inc
;
source
include
/
not_embedded
.
inc
;
source
include
/
not_windows
.
inc
;
source
include
/
have_innodb
.
inc
;
source
include
/
master
-
slave
.
inc
;
let
$engine_type
=
InnoDB
;
#let $engine_type= MyISAM;
# Suppress warnings that might be generated during the test
disable_query_log
;
connection
master
;
call
mtr
.
add_suppression
(
"Timeout waiting for reply of binlog"
);
connection
slave
;
call
mtr
.
add_suppression
(
"Master server does not support"
);
# These will be removed after fix bug#45852
call
mtr
.
add_suppression
(
"Set 'rpl_semi_sync_master_reply_log_file_pos' on master failed"
);
call
mtr
.
add_suppression
(
"Slave I/O: Fatal error: Failed to run 'after_queue_event' hook, Error_code: 1593"
);
enable_query_log
;
--
echo
#
--
echo
# Uninstall semi-sync plugins on master and slave
--
echo
#
connection
slave
;
disable_query_log
;
source
include
/
stop_slave
.
inc
;
reset
slave
;
disable_warnings
;
error
0
,
1305
;
UNINSTALL
PLUGIN
rpl_semi_sync_slave
;
error
0
,
1305
;
UNINSTALL
PLUGIN
rpl_semi_sync_master
;
enable_warnings
;
connection
master
;
reset
master
;
set
sql_log_bin
=
0
;
disable_warnings
;
error
0
,
1305
;
UNINSTALL
PLUGIN
rpl_semi_sync_slave
;
error
0
,
1305
;
UNINSTALL
PLUGIN
rpl_semi_sync_master
;
enable_warnings
;
set
sql_log_bin
=
1
;
enable_query_log
;
--
echo
#
--
echo
# Main test of semi-sync replication start here
--
echo
#
connection
master
;
echo
[
on
master
];
disable_query_log
;
let
$value
=
query_get_value
(
show
variables
like
'rpl_semi_sync_master_enabled'
,
Value
,
1
);
if
(
`select '$value' = 'No such row'`
)
{
set
sql_log_bin
=
0
;
INSTALL
PLUGIN
rpl_semi_sync_master
SONAME
'libsemisync_master.so'
;
set
global
rpl_semi_sync_master_timeout
=
5000
;
/* 5s */
set
sql_log_bin
=
1
;
}
enable_query_log
;
echo
[
default
state
of
semi
-
sync
on
master
should
be
OFF
];
show
variables
like
'rpl_semi_sync_master_enabled'
;
echo
[
enable
semi
-
sync
on
master
];
set
global
rpl_semi_sync_master_enabled
=
1
;
show
variables
like
'rpl_semi_sync_master_enabled'
;
echo
[
status
of
semi
-
sync
on
master
should
be
OFF
without
any
semi
-
sync
slaves
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
--
echo
#
--
echo
# BUG#45672 Semisync repl: ActiveTranx:insert_tranx_node: transaction node allocation failed
--
echo
# BUG#45673 Semisynch reports correct operation even if no slave is connected
--
echo
#
# BUG#45672 When semi-sync is enabled on master, it would allocate
# transaction node even without semi-sync slave connected, and would
# finally result in transaction node allocation error.
#
# Semi-sync master will pre-allocate 'max_connections' transaction
# nodes, so here we do more than that much transactions to check if it
# will fail or not.
# select @@global.max_connections + 1;
let
$i
=
`select @@global.max_connections + 1`
;
disable_query_log
;
eval
create
table
t1
(
a
int
)
engine
=
$engine_type
;
while
(
$i
)
{
eval
insert
into
t1
values
(
$i
);
dec
$i
;
}
drop
table
t1
;
enable_query_log
;
# BUG#45673
echo
[
status
of
semi
-
sync
on
master
should
be
OFF
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
disable_query_log
;
# reset master to make sure the following test will start with a clean environment
reset
master
;
enable_query_log
;
--
echo
#
--
echo
# INSTALL PLUGIN semi-sync on slave
--
echo
#
connection
slave
;
echo
[
on
slave
];
disable_query_log
;
let
$value
=
query_get_value
(
show
variables
like
'rpl_semi_sync_slave_enabled'
,
Value
,
1
);
if
(
`select '$value' = 'No such row'`
)
{
set
sql_log_bin
=
0
;
INSTALL
PLUGIN
rpl_semi_sync_slave
SONAME
'libsemisync_slave.so'
;
set
sql_log_bin
=
1
;
}
enable_query_log
;
echo
[
default
state
of
semi
-
sync
on
slave
should
be
OFF
];
show
variables
like
'rpl_semi_sync_slave_enabled'
;
echo
[
enable
semi
-
sync
on
slave
];
set
global
rpl_semi_sync_slave_enabled
=
1
;
show
variables
like
'rpl_semi_sync_slave_enabled'
;
source
include
/
start_slave
.
inc
;
connection
master
;
echo
[
on
master
];
# NOTE: Rpl_semi_sync_master_client will only be updated when
# semi-sync slave has started binlog dump request
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
1
;
source
include
/
wait_for_status_var
.
inc
;
echo
[
initial
master
state
after
the
semi
-
sync
slave
connected
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
replace_result
$engine_type
ENGINE_TYPE
;
eval
create
table
t1
(
n
int
)
engine
=
$engine_type
;
echo
[
master
state
after
CREATE
TABLE
statement
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
let
$i
=
300
;
echo
[
insert
records
to
table
];
disable_query_log
;
while
(
$i
)
{
eval
insert
into
t1
values
(
$i
);
dec
$i
;
}
enable_query_log
;
echo
[
master
status
after
inserts
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
sync_slave_with_master
;
echo
[
on
slave
];
echo
[
slave
status
after
replicated
inserts
];
show
status
like
'Rpl_semi_sync_slave_status'
;
select
count
(
distinct
n
)
from
t1
;
select
min
(
n
)
from
t1
;
select
max
(
n
)
from
t1
;
source
include
/
stop_slave
.
inc
;
connection
master
;
echo
[
on
master
];
# The first semi-sync check should be on because after slave stop,
# there are no transactions on the master.
echo
[
master
status
should
be
ON
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
show
status
like
'Rpl_semi_sync_master_clients'
;
echo
[
semi
-
sync
replication
of
these
transactions
will
fail
];
insert
into
t1
values
(
500
);
delete
from
t1
where
n
<
500
;
insert
into
t1
values
(
100
);
# The second semi-sync check should be off because one transaction
# times out during waiting.
echo
[
master
status
should
be
OFF
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
# Save the master position for later use.
save_master_pos
;
connection
slave
;
echo
[
on
slave
];
echo
[
slave
status
should
be
OFF
];
show
status
like
'Rpl_semi_sync_slave_status'
;
source
include
/
start_slave
.
inc
;
sync_with_master
;
echo
[
slave
status
should
be
ON
];
show
status
like
'Rpl_semi_sync_slave_status'
;
select
count
(
distinct
n
)
from
t1
;
select
min
(
n
)
from
t1
;
select
max
(
n
)
from
t1
;
connection
master
;
echo
[
on
master
];
echo
[
do
something
to
activate
semi
-
sync
];
drop
table
t1
;
# The third semi-sync check should be on again.
echo
[
master
status
should
be
ON
again
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
show
status
like
'Rpl_semi_sync_master_clients'
;
sync_slave_with_master
;
echo
[
on
slave
];
source
include
/
stop_slave
.
inc
;
connection
master
;
echo
[
on
master
];
source
include
/
show_master_logs
.
inc
;
show
variables
like
'rpl_semi_sync_master_enabled'
;
echo
[
disable
semi
-
sync
on
the
fly
];
set
global
rpl_semi_sync_master_enabled
=
0
;
show
variables
like
'rpl_semi_sync_master_enabled'
;
show
status
like
'Rpl_semi_sync_master_status'
;
echo
[
enable
semi
-
sync
on
the
fly
];
set
global
rpl_semi_sync_master_enabled
=
1
;
show
variables
like
'rpl_semi_sync_master_enabled'
;
show
status
like
'Rpl_semi_sync_master_status'
;
connection
slave
;
echo
[
on
slave
];
source
include
/
start_slave
.
inc
;
connection
master
;
echo
[
on
master
];
replace_result
$engine_type
ENGINE_TYPE
;
eval
create
table
t1
(
a
int
)
engine
=
$engine_type
;
drop
table
t1
;
##show status like 'Rpl_semi_sync_master_status';
sync_slave_with_master
;
--
replace_column
2
#
show
status
like
'Rpl_relay%'
;
echo
[
test
reset
master
];
connection
master
;
echo
[
on
master
];
reset
master
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
connection
slave
;
echo
[
on
slave
];
source
include
/
stop_slave
.
inc
;
reset
slave
;
# Kill the dump thread on master for previous slave connection and
# wait for it to exit
connection
master
;
let
$_tid
=
`select id from information_schema.processlist where command = 'Binlog Dump' limit 1`
;
if
(
$_tid
)
{
disable_query_log
;
eval
kill
query
$_tid
;
enable_query_log
;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
0
;
source
include
/
wait_for_status_var
.
inc
;
}
connection
slave
;
source
include
/
start_slave
.
inc
;
connection
master
;
echo
[
on
master
];
# Wait for dump thread to start, Rpl_semi_sync_master_clients will be
# 1 after dump thread started.
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
1
;
source
include
/
wait_for_status_var
.
inc
;
replace_result
$engine_type
ENGINE_TYPE
;
eval
create
table
t1
(
a
int
)
engine
=
$engine_type
;
insert
into
t1
values
(
1
);
insert
into
t1
values
(
2
),
(
3
);
sync_slave_with_master
;
echo
[
on
slave
];
select
*
from
t1
;
connection
master
;
echo
[
on
master
];
echo
[
master
semi
-
sync
status
should
be
ON
];
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
--
echo
#
--
echo
# Start semi-sync replication without SUPER privilege
--
echo
#
connection
slave
;
source
include
/
stop_slave
.
inc
;
reset
slave
;
connection
master
;
echo
[
on
master
];
reset
master
;
# Kill the dump thread on master for previous slave connection and wait for it to exit
let
$_tid
=
`select id from information_schema.processlist where command = 'Binlog Dump' limit 1`
;
if
(
$_tid
)
{
disable_query_log
;
eval
kill
query
$_tid
;
enable_query_log
;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
0
;
source
include
/
wait_for_status_var
.
inc
;
}
# Do not binlog the following statement because it will generate
# different events for ROW and STATEMENT format
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
;
connection
slave
;
echo
[
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'
;
source
include
/
start_slave
.
inc
;
show
status
like
'Rpl_semi_sync_slave_status'
;
connection
master
;
echo
[
on
master
];
# Wait for the semi-sync binlog dump thread to start
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
1
;
source
include
/
wait_for_status_var
.
inc
;
echo
[
master
semi
-
sync
should
be
ON
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
insert
into
t1
values
(
4
);
insert
into
t1
values
(
5
);
echo
[
master
semi
-
sync
should
be
ON
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
show
status
like
'Rpl_semi_sync_master_no_tx'
;
show
status
like
'Rpl_semi_sync_master_yes_tx'
;
--
echo
#
--
echo
# Test semi-sync slave connect to non-semi-sync master
--
echo
#
# Disable semi-sync on master
connection
slave
;
echo
[
on
slave
];
source
include
/
stop_slave
.
inc
;
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
connection
master
;
echo
[
on
master
];
# Kill the dump thread on master for previous slave connection and wait for it to exit
let
$_tid
=
`select id from information_schema.processlist where command = 'Binlog Dump' limit 1`
;
if
(
$_tid
)
{
disable_query_log
;
eval
kill
query
$_tid
;
enable_query_log
;
# After dump thread exit, Rpl_semi_sync_master_clients will be 0
let
$status_var
=
Rpl_semi_sync_master_clients
;
let
$status_var_value
=
0
;
source
include
/
wait_for_status_var
.
inc
;
}
echo
[
Semi
-
sync
status
on
master
should
be
ON
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
set
global
rpl_semi_sync_master_enabled
=
0
;
connection
slave
;
echo
[
on
slave
];
SHOW
VARIABLES
LIKE
'rpl_semi_sync_slave_enabled'
;
source
include
/
start_slave
.
inc
;
connection
master
;
echo
[
on
master
];
insert
into
t1
values
(
8
);
echo
[
master
semi
-
sync
clients
should
be
0
,
status
should
be
OFF
];
show
status
like
'Rpl_semi_sync_master_clients'
;
show
status
like
'Rpl_semi_sync_master_status'
;
sync_slave_with_master
;
echo
[
on
slave
];
show
status
like
'Rpl_semi_sync_slave_status'
;
# Uninstall semi-sync plugin on master
connection
slave
;
source
include
/
stop_slave
.
inc
;
connection
master
;
echo
[
on
master
];
set
sql_log_bin
=
0
;
UNINSTALL
PLUGIN
rpl_semi_sync_master
;
set
sql_log_bin
=
1
;
enable_query_log
;
SHOW
VARIABLES
LIKE
'rpl_semi_sync_master_enabled'
;
connection
slave
;
echo
[
on
slave
];
SHOW
VARIABLES
LIKE
'rpl_semi_sync_slave_enabled'
;
source
include
/
start_slave
.
inc
;
connection
master
;
echo
[
on
master
];
insert
into
t1
values
(
10
);
sync_slave_with_master
;
echo
[
on
slave
];
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
--
echo
#
--
echo
# Test non-semi-sync slave connect to semi-sync master
--
echo
#
connection
master
;
set
sql_log_bin
=
0
;
INSTALL
PLUGIN
rpl_semi_sync_master
SONAME
'libsemisync_master.so'
;
set
global
rpl_semi_sync_master_timeout
=
5000
;
/* 5s */
set
sql_log_bin
=
1
;
set
global
rpl_semi_sync_master_enabled
=
1
;
connection
slave
;
echo
[
on
slave
];
source
include
/
stop_slave
.
inc
;
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
echo
[
uninstall
semi
-
sync
slave
plugin
];
UNINSTALL
PLUGIN
rpl_semi_sync_slave
;
SHOW
VARIABLES
LIKE
'rpl_semi_sync_slave_enabled'
;
source
include
/
start_slave
.
inc
;
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
source
include
/
stop_slave
.
inc
;
echo
[
reinstall
semi
-
sync
slave
plugin
and
disable
semi
-
sync
];
INSTALL
PLUGIN
rpl_semi_sync_slave
SONAME
'libsemisync_slave.so'
;
set
global
rpl_semi_sync_slave_enabled
=
0
;
SHOW
VARIABLES
LIKE
'rpl_semi_sync_slave_enabled'
;
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
source
include
/
start_slave
.
inc
;
SHOW
STATUS
LIKE
'Rpl_semi_sync_slave_status'
;
--
echo
#
--
echo
# Clean up
--
echo
#
connection
slave
;
source
include
/
stop_slave
.
inc
;
UNINSTALL
PLUGIN
rpl_semi_sync_slave
;
connection
master
;
UNINSTALL
PLUGIN
rpl_semi_sync_master
;
connection
slave
;
source
include
/
start_slave
.
inc
;
connection
master
;
drop
table
t1
;
drop
user
rpl
@
127.0
.
0.1
;
flush
privileges
;
sync_slave_with_master
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment