mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-27 16:12:04 +00:00
Fix for 938068: pt-table-checksum doesn't warn if binlog_format=row or mixed on slaves
This commit is contained in:
@@ -8586,6 +8586,22 @@ sub main {
|
|||||||
);
|
);
|
||||||
PTDEBUG && _d(scalar @$slaves, 'slaves found');
|
PTDEBUG && _d(scalar @$slaves, 'slaves found');
|
||||||
|
|
||||||
|
if ( $o->get('check-binlog-format') ) {
|
||||||
|
my ($master_binlog) = $master_dbh->selectrow_array('SELECT @@binlog_format');
|
||||||
|
my $err = '';
|
||||||
|
for my $slave_cxn (@$slaves) {
|
||||||
|
my ($slave_binlog) = $slave_cxn->dbh->selectrow_array('SELECT @@binlog_format');
|
||||||
|
if ( $master_binlog ne $slave_binlog ) {
|
||||||
|
$err .= $master_cxn->name() . " has binlog_format $master_binlog "
|
||||||
|
. "but its slave " . $slave_cxn->name() . " has format "
|
||||||
|
. $slave_binlog . ". This can break replication. If you "
|
||||||
|
. "understand the risks, you can specify "
|
||||||
|
. "--no-check-binlog-format to avoid this error.\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
die $err if $err;
|
||||||
|
}
|
||||||
|
|
||||||
if ( $master_cxn->is_cluster_node() && !@$slaves ) {
|
if ( $master_cxn->is_cluster_node() && !@$slaves ) {
|
||||||
die $master_cxn->name() . " is a cluster node but no other nodes "
|
die $master_cxn->name() . " is a cluster node but no other nodes "
|
||||||
. "or regular replicas were found. Use --recursion-method=dsn "
|
. "or regular replicas were found. Use --recursion-method=dsn "
|
||||||
@@ -10506,6 +10522,12 @@ type: time; default: 1; group: Throttle
|
|||||||
|
|
||||||
Sleep time between checks for L<"--max-lag">.
|
Sleep time between checks for L<"--max-lag">.
|
||||||
|
|
||||||
|
=item --[no]check-binlog-format
|
||||||
|
|
||||||
|
default: yes
|
||||||
|
|
||||||
|
Check that the binlog_format is the same in all servers.
|
||||||
|
|
||||||
=item --[no]check-plan
|
=item --[no]check-plan
|
||||||
|
|
||||||
default: yes
|
default: yes
|
||||||
|
@@ -191,6 +191,35 @@ like(
|
|||||||
"Bug 1016131: ptc should skip tables where all columns are excluded"
|
"Bug 1016131: ptc should skip tables where all columns are excluded"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# #############################################################################
|
||||||
|
# pt-table-checksum doesn't warn if binlog_format=row or mixed on slaves
|
||||||
|
# https://bugs.launchpad.net/percona-toolkit/+bug/938068
|
||||||
|
# #############################################################################
|
||||||
|
|
||||||
|
{
|
||||||
|
diag("Adding two new slaves to master");
|
||||||
|
local $ENV{BINLOG_FORMAT} = 'ROW';
|
||||||
|
diag(`$trunk/sandbox/start-sandbox slave 12348 12345`);
|
||||||
|
local $ENV{BINLOG_FORMAT} = 'MIXED';
|
||||||
|
diag(`$trunk/sandbox/start-sandbox slave 12349 12348`);
|
||||||
|
|
||||||
|
$output = output( sub { pt_table_checksum::main(@args) }, stderr => 1 );
|
||||||
|
|
||||||
|
my $re = qr/ has binlog_format .*? has format (\S+)\. This can break replication/msi;
|
||||||
|
like(
|
||||||
|
$output,
|
||||||
|
$re,
|
||||||
|
"Bug 938068: doesn't warn if binlog_format=row or mixed on slaves"
|
||||||
|
);
|
||||||
|
|
||||||
|
is_deeply(
|
||||||
|
[ $output =~ /$re/g ],
|
||||||
|
[ 'ROW', 'MIXED' ],
|
||||||
|
"...and warns for both level 1 and level 2 slaves"
|
||||||
|
) or diag($output);
|
||||||
|
|
||||||
|
diag(`$trunk/sandbox/stop-sandbox slave 12348 12349`);
|
||||||
|
}
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
# Done.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
Reference in New Issue
Block a user