mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-15530: Variable replicate_rewrite_db cannot be found in "show global variables"
- Add `replicate_rewrite_db` status variable, that may accept comma
separated key-value pairs.
- Note that option `OPT_REPLICATE_REWRITE_DB` already existed in `mysqld.h`
from this commit 23d8586dbf
Reviewer:Brandon Nesterenko <brandon.nesterenko@mariadb.com>
This commit is contained in:
committed by
Brandon Nesterenko
parent
ccf0e27f28
commit
1a057a923b
163
mysql-test/suite/rpl/r/rpl_rewrite_db_sys_vars.result
Normal file
163
mysql-test/suite/rpl/r/rpl_rewrite_db_sys_vars.result
Normal file
@@ -0,0 +1,163 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
#
|
||||
# MDEV-15530 Variable replicate_rewrite_db cannot be found
|
||||
# in "show global variables"
|
||||
#
|
||||
# Create DBs and verify that slave has to be stopped before setting sys var
|
||||
connection slave;
|
||||
select @@session.server_id;
|
||||
@@session.server_id
|
||||
2
|
||||
create database replica_db1;
|
||||
create database y;
|
||||
create database test_replica;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
primary_db1->replica_db1,x->y
|
||||
# Ensuring SHOW SLAVE STATUS produces correct value for Replicate_Rewrite_DB...
|
||||
# ...success
|
||||
# Create DBs and tables on primary
|
||||
connection master;
|
||||
create database primary_db1;
|
||||
create database x;
|
||||
use primary_db1;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (2),(4);
|
||||
use x;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (654),(532);
|
||||
include/save_master_gtid.inc
|
||||
# Check replica
|
||||
connection slave;
|
||||
include/sync_with_master_gtid.inc
|
||||
include/diff_tables.inc [master:primary_db1.my_table,slave:replica_db1.my_table]
|
||||
include/diff_tables.inc [master:x.my_table,slave:y.my_table]
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
primary_db1->replica_db1,x->y
|
||||
show tables from replica_db1;
|
||||
Tables_in_replica_db1
|
||||
my_table
|
||||
select * from replica_db1.my_table;
|
||||
t
|
||||
2
|
||||
4
|
||||
show tables from y;
|
||||
Tables_in_y
|
||||
my_table
|
||||
select * from y.my_table;
|
||||
t
|
||||
654
|
||||
532
|
||||
# Set replica sys var replicate_rewrite_db
|
||||
connection slave;
|
||||
SET @@GLOBAL.replicate_rewrite_db="test_master->test_replica";
|
||||
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
||||
include/stop_slave.inc
|
||||
SET @save_replicate_rewrite_db = @@GLOBAL.replicate_rewrite_db;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
primary_db1->replica_db1,x->y
|
||||
SET @@GLOBAL.replicate_rewrite_db="test_master->test_replica";
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
test_master->test_replica
|
||||
SHOW DATABASES like 'test_replica';
|
||||
Database (test_replica)
|
||||
test_replica
|
||||
include/start_slave.inc
|
||||
# Ensuring SHOW SLAVE STATUS produces correct value for Replicate_Rewrite_DB...
|
||||
# ...success
|
||||
# Create DB and tables on primary
|
||||
connection master;
|
||||
create database test_master;
|
||||
use test_master;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (1),(3);
|
||||
include/save_master_gtid.inc
|
||||
# Ensure that the replica receives all of the primary's events without
|
||||
# error
|
||||
connection slave;
|
||||
include/sync_with_master_gtid.inc
|
||||
Last_SQL_Error =
|
||||
Last_SQL_Errno = 0
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
test_master->test_replica
|
||||
SHOW tables from test_replica;
|
||||
Tables_in_test_replica
|
||||
my_table
|
||||
select * from test_replica.my_table;
|
||||
t
|
||||
1
|
||||
3
|
||||
include/diff_tables.inc [master:test_master.my_table,slave:test_replica.my_table]
|
||||
# Update of values on primary for DB not set in replication_rewrite_db
|
||||
connection master;
|
||||
use x;
|
||||
insert into my_table values (314);
|
||||
select * from my_table;
|
||||
t
|
||||
654
|
||||
532
|
||||
314
|
||||
include/save_master_gtid.inc
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
include/reset_slave.inc
|
||||
include/start_slave.inc
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
test_master->test_replica
|
||||
include/sync_with_master_gtid.inc
|
||||
select * from y.my_table;
|
||||
t
|
||||
654
|
||||
532
|
||||
# Dynamic updates to the replication filter should be lost after server restart
|
||||
connection slave;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
test_master->test_replica
|
||||
connection master;
|
||||
use x;
|
||||
insert into my_table values (1000);
|
||||
select * from my_table;
|
||||
t
|
||||
654
|
||||
532
|
||||
314
|
||||
1000
|
||||
include/save_master_gtid.inc
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
include/reset_slave.inc
|
||||
include/rpl_restart_server.inc [server_number=2]
|
||||
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=MASTER_MYPORT, MASTER_USER='root';
|
||||
connection slave;
|
||||
include/start_slave.inc
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
@@GLOBAL.replicate_rewrite_db
|
||||
primary_db1->replica_db1,x->y
|
||||
include/sync_with_master_gtid.inc
|
||||
select * from y.my_table;
|
||||
t
|
||||
654
|
||||
532
|
||||
314
|
||||
1000
|
||||
# Cleanup
|
||||
connection master;
|
||||
drop database test_master;
|
||||
drop database primary_db1;
|
||||
drop database x;
|
||||
include/save_master_gtid.inc
|
||||
connection slave;
|
||||
include/sync_with_master_gtid.inc
|
||||
drop database test_replica;
|
||||
drop database replica_db1;
|
||||
drop database y;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
include/rpl_end.inc
|
2
mysql-test/suite/rpl/t/rpl_rewrite_db_sys_vars-slave.opt
Normal file
2
mysql-test/suite/rpl/t/rpl_rewrite_db_sys_vars-slave.opt
Normal file
@@ -0,0 +1,2 @@
|
||||
"--replicate-rewrite-db=primary_db1->replica_db1"
|
||||
"--replicate-rewrite-db=x->y"
|
163
mysql-test/suite/rpl/t/rpl_rewrite_db_sys_vars.test
Normal file
163
mysql-test/suite/rpl/t/rpl_rewrite_db_sys_vars.test
Normal file
@@ -0,0 +1,163 @@
|
||||
-- source include/have_binlog_format_mixed.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Testing rpl option replicate_rewrite_db
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-15530 Variable replicate_rewrite_db cannot be found
|
||||
--echo # in "show global variables"
|
||||
--echo #
|
||||
|
||||
--echo # Create DBs and verify that slave has to be stopped before setting sys var
|
||||
|
||||
connection slave;
|
||||
--let $rpl_server_id= `select @@session.server_id`
|
||||
select @@session.server_id;
|
||||
|
||||
# These DBs will be rewrited from opt file
|
||||
create database replica_db1;
|
||||
create database y;
|
||||
# This DB will be rewrited from test case
|
||||
create database test_replica;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
let $rewrite_db_sss= query_get_value(SHOW SLAVE STATUS, Replicate_Rewrite_DB, 1);
|
||||
--echo # Ensuring SHOW SLAVE STATUS produces correct value for Replicate_Rewrite_DB...
|
||||
if (`SELECT strcmp(@@global.replicate_rewrite_db, "$rewrite_db_sss") != 0`)
|
||||
{
|
||||
die SHOW SLAVE STATUS Replicate_Rewrite_DB value $rewrite_db_sss does not match variable @@GLOBAL.replicate_rewrite_db;
|
||||
}
|
||||
--echo # ...success
|
||||
|
||||
|
||||
--echo # Create DBs and tables on primary
|
||||
connection master;
|
||||
--enable_warnings
|
||||
create database primary_db1;
|
||||
create database x;
|
||||
use primary_db1;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (2),(4);
|
||||
use x;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (654),(532);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--echo # Check replica
|
||||
--connection slave
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--let $diff_tables=master:primary_db1.my_table,slave:replica_db1.my_table
|
||||
--source include/diff_tables.inc
|
||||
--let $diff_tables=master:x.my_table,slave:y.my_table
|
||||
--source include/diff_tables.inc
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
show tables from replica_db1;
|
||||
select * from replica_db1.my_table;
|
||||
show tables from y;
|
||||
select * from y.my_table;
|
||||
|
||||
--echo # Set replica sys var replicate_rewrite_db
|
||||
connection slave;
|
||||
--error ER_SLAVE_MUST_STOP
|
||||
SET @@GLOBAL.replicate_rewrite_db="test_master->test_replica";
|
||||
source include/stop_slave.inc;
|
||||
SET @save_replicate_rewrite_db = @@GLOBAL.replicate_rewrite_db;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
SET @@GLOBAL.replicate_rewrite_db="test_master->test_replica";
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
SHOW DATABASES like 'test_replica';
|
||||
source include/start_slave.inc;
|
||||
let $rewrite_db_sss= query_get_value(SHOW SLAVE STATUS, Replicate_Rewrite_DB, 1);
|
||||
--echo # Ensuring SHOW SLAVE STATUS produces correct value for Replicate_Rewrite_DB...
|
||||
if (`SELECT strcmp(@@global.replicate_rewrite_db, "$rewrite_db_sss") != 0`)
|
||||
{
|
||||
die SHOW SLAVE STATUS Replicate_Rewrite_DB value $rewrite_db_sss does not match variable @@GLOBAL.replicate_rewrite_db;
|
||||
}
|
||||
--echo # ...success
|
||||
|
||||
--echo # Create DB and tables on primary
|
||||
connection master;
|
||||
--enable_warnings
|
||||
create database test_master;
|
||||
use test_master;
|
||||
create table my_table (t int);
|
||||
insert into my_table values (1),(3);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--echo # Ensure that the replica receives all of the primary's events without
|
||||
--echo # error
|
||||
--connection slave
|
||||
--source include/sync_with_master_gtid.inc
|
||||
let $error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||
--echo Last_SQL_Error = $error
|
||||
let $errno= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
--echo Last_SQL_Errno = $errno
|
||||
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
SHOW tables from test_replica;
|
||||
select * from test_replica.my_table;
|
||||
|
||||
# Additional check for tables
|
||||
--let $diff_tables=master:test_master.my_table,slave:test_replica.my_table
|
||||
--source include/diff_tables.inc
|
||||
|
||||
--echo # Update of values on primary for DB not set in replication_rewrite_db
|
||||
connection master;
|
||||
use x;
|
||||
insert into my_table values (314);
|
||||
select * from my_table;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
connection slave;
|
||||
--source include/stop_slave.inc
|
||||
--source include/reset_slave.inc
|
||||
--source include/start_slave.inc
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
--source include/sync_with_master_gtid.inc
|
||||
# This shouldn't get the new values from x DB on master
|
||||
select * from y.my_table;
|
||||
|
||||
--echo # Dynamic updates to the replication filter should be lost after server restart
|
||||
# Old value
|
||||
connection slave;
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
|
||||
connection master;
|
||||
use x;
|
||||
insert into my_table values (1000);
|
||||
select * from my_table;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
connection slave;
|
||||
--source include/stop_slave.inc
|
||||
--source include/reset_slave.inc
|
||||
--let $rpl_server_number= 2
|
||||
--source include/rpl_restart_server.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$MASTER_MYPORT, MASTER_USER='root';
|
||||
|
||||
# New value
|
||||
connection slave;
|
||||
--source include/start_slave.inc
|
||||
SELECT @@GLOBAL.replicate_rewrite_db;
|
||||
--source include/sync_with_master_gtid.inc
|
||||
# This should update values with 314 and 1000 from primary
|
||||
select * from y.my_table;
|
||||
|
||||
--echo # Cleanup
|
||||
connection master;
|
||||
drop database test_master;
|
||||
drop database primary_db1;
|
||||
drop database x;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
|
||||
--connection slave
|
||||
--source include/sync_with_master_gtid.inc
|
||||
drop database test_replica;
|
||||
drop database replica_db1;
|
||||
drop database y;
|
||||
source include/stop_slave.inc;
|
||||
source include/start_slave.inc;
|
||||
|
||||
--source include/rpl_end.inc
|
||||
# end of 10.11 tests
|
Reference in New Issue
Block a user