mirror of
https://github.com/MariaDB/server.git
synced 2025-02-22 05:13:08 +01:00

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>
63 lines
1.9 KiB
PHP
63 lines
1.9 KiB
PHP
# 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
|