mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-20119: Implement the --do-domain-ids, --ignore-domain-ids, and --ignore-server-ids options for mysqlbinlog
New Feature: ============ Extend mariadb-binlog command-line tool to allow for filtering events using GTID domain and server ids. The functionality mimics that of a replica server’s DO_DOMAIN_IDS, IGNORE_DOMAIN_IDS, and IGNORE_SERVER_IDS from CHANGE MASTER TO. For completeness, this patch additionally adds the option --do-server-ids as an alias for --server-id, which now accepts a list of server ids instead of a single one. Example usage: mariadb-binlog --do-domain-ids=2,3,4 --do-server-ids=1,3 master-bin.000001 Functional Notes: 1. --do-domain-ids cannot be combined with --ignore-domain-ids 2. --do-server-ids cannot be combined with --ignore-server-ids 3. A domain id filter can be combined with a server id filter 4. When any new filter options are combined with the --gtid-strict-mode option, events from excluded domains/servers are not validated. 5. Domain/server id filters can be combined with GTID ranges (i.e. specifications of --start-position and --stop-position). However, because the --stop-position option implicitly undertakes filtering to only output events within its range of domains, when combined with --do-domain-ids or --ignore-domain-ids, output will consist of the intersection between the filters. Specifically, with --do-domain-ids and --stop-position, only events with domain ids present in both argument lists will be output. Conversely, with --ignore-domain-ids and --stop-position, only events with domain ids present in the --stop-position and absent from the --ignore-domain-ids options will be output. Reviewed By ============ Andrei Elkin <andrei.elkin@mariadb.com>
This commit is contained in:
63
mysql-test/suite/rpl/include/rpl_check_table_consistency.inc
Normal file
63
mysql-test/suite/rpl/include/rpl_check_table_consistency.inc
Normal file
@@ -0,0 +1,63 @@
|
||||
# This file provides logic to ensure that all tables in a database are the
|
||||
# same between two connections.
|
||||
#
|
||||
# param $check_db : The name of the database to validate all tables are the
|
||||
# same within (test by default)
|
||||
# param $con1 : The connection name of the primary server, defaults to
|
||||
# master
|
||||
# param $con2 : The connection name of the replica server, defaults to
|
||||
# slave
|
||||
|
||||
--let $include_filename= rpl_check_table_consistency.inc
|
||||
--source include/begin_include_file.inc
|
||||
|
||||
if (!$con1)
|
||||
{
|
||||
--let $con1= master
|
||||
}
|
||||
if (!$con2)
|
||||
{
|
||||
--let $con2= slave
|
||||
}
|
||||
if (!$check_db)
|
||||
{
|
||||
--let $check_db= test
|
||||
}
|
||||
|
||||
--connection $con2
|
||||
--let $n_tables= `select count(*) from information_schema.tables WHERE table_schema = '$check_db'`
|
||||
|
||||
--echo # Checking consistency of '$check_db' database tables between $con1 and $con2
|
||||
|
||||
--connection $con1
|
||||
--let $c1_n_tables= `select count(*) from information_schema.tables WHERE table_schema = '$check_db'`
|
||||
if (`SELECT $c1_n_tables != $n_tables`)
|
||||
{
|
||||
die "$con1 had $c1_n_tables tables but $con2 had $n_tables after binlog replay";
|
||||
}
|
||||
--echo # Both servers have $n_tables tables
|
||||
|
||||
--let $ctr= 1
|
||||
--echo # Verifying integrity of tables..
|
||||
while($ctr <= $n_tables)
|
||||
{
|
||||
--let $cksum_tbl= query_get_value(SELECT table_name FROM information_schema.tables WHERE table_schema = 'test' ORDER BY table_name ASC, table_name, $ctr)
|
||||
--connection $con1
|
||||
--let $c1_cksum= `CHECKSUM TABLE $cksum_tbl`
|
||||
--connection $con2
|
||||
--let $c2_cksum= `CHECKSUM TABLE $cksum_tbl`
|
||||
|
||||
if ($c1_cksum != $c2_cksum)
|
||||
{
|
||||
die "Table $cksum_tbl differs between connections $con1 and $con2";
|
||||
}
|
||||
if ($c1_cksum == $c2_cksum)
|
||||
{
|
||||
--echo # $cksum_tbl is equivalent on $con1 and $con2
|
||||
}
|
||||
--let $ctr= `SELECT $ctr+1`
|
||||
}
|
||||
--echo # All tables are consistent
|
||||
|
||||
--let $include_filename= rpl_check_table_consistency.inc
|
||||
--source include/end_include_file.inc
|
Reference in New Issue
Block a user