mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-26 15:31:55 +00:00
Merge pull request #420 from percona/PT-1760
PT-1760 regression on slave with replication channels
This commit is contained in:
@@ -2379,7 +2379,7 @@ sub parse {
|
||||
foreach my $key ( keys %$opts ) {
|
||||
PTDEBUG && _d('Finding value for', $key);
|
||||
$final_props{$key} = $given_props{$key};
|
||||
if ( !defined $final_props{$key}
|
||||
if ( !defined $final_props{$key}
|
||||
&& defined $prev->{$key} && $opts->{$key}->{copy} )
|
||||
{
|
||||
$final_props{$key} = $prev->{$key};
|
||||
@@ -2406,6 +2406,10 @@ sub parse {
|
||||
}
|
||||
}
|
||||
|
||||
if ($final_props{F}) {
|
||||
%final_props = ( 'F' => $final_props{F} );
|
||||
}
|
||||
|
||||
return \%final_props;
|
||||
}
|
||||
|
||||
@@ -2546,6 +2550,7 @@ sub get_dbh {
|
||||
|
||||
if ( $cxn_string =~ m/mysql/i ) {
|
||||
my $sql;
|
||||
|
||||
if ( my ($charset) = $cxn_string =~ m/charset=([\w]+)/ ) {
|
||||
$sql = qq{/*!40101 SET NAMES "$charset"*/};
|
||||
PTDEBUG && _d($dbh, $sql);
|
||||
@@ -2586,6 +2591,28 @@ sub get_dbh {
|
||||
. ": $EVAL_ERROR";
|
||||
}
|
||||
}
|
||||
my ($mysql_version) = eval { $dbh->selectrow_array('SELECT VERSION()') };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot get MySQL version: $EVAL_ERROR";
|
||||
}
|
||||
|
||||
my (undef, $character_set_server) = eval { $dbh->selectrow_array("SHOW VARIABLES LIKE 'character_set_server'") };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot get MySQL var character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
|
||||
if ($mysql_version =~ m/^(\d+)\.(\d)\.(\d+).*/) {
|
||||
if ($1 >= 8 && $character_set_server =~ m/^utf8/) {
|
||||
$dbh->{mysql_enable_utf8} = 1;
|
||||
my $msg = "MySQL version $mysql_version >= 8 and character_set_server = $character_set_server\n".
|
||||
"Setting: SET NAMES $character_set_server";
|
||||
PTDEBUG && _d($msg);
|
||||
eval { $dbh->do("SET NAMES 'utf8mb4'") };
|
||||
if ($EVAL_ERROR) {
|
||||
die "Cannot SET NAMES $character_set_server: $EVAL_ERROR";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PTDEBUG && _d('DBH info: ',
|
||||
$dbh,
|
||||
@@ -3893,13 +3920,20 @@ sub get_slave_status {
|
||||
if (!$self->{channel}) {
|
||||
die 'This server returned more than one row for SHOW SLAVE STATUS but "channel" was not specified on the command line';
|
||||
}
|
||||
my $slave_use_channels;
|
||||
for my $row (@$sss_rows) {
|
||||
$row = { map { lc($_) => $row->{$_} } keys %$row }; # lowercase the keys
|
||||
if ($row->{channel_name}) {
|
||||
$slave_use_channels = 1;
|
||||
}
|
||||
if ($row->{channel_name} eq $self->{channel}) {
|
||||
$ss = $row;
|
||||
last;
|
||||
}
|
||||
}
|
||||
if (!$ss && $slave_use_channels) {
|
||||
die 'This server is using replication channels but "channel" was not specified on the command line';
|
||||
}
|
||||
} else {
|
||||
if ($sss_rows->[0]->{channel_name} && $sss_rows->[0]->{channel_name} ne $self->{channel}) {
|
||||
die 'This server is using replication channels but "channel" was not specified on the command line';
|
||||
@@ -3912,6 +3946,9 @@ sub get_slave_status {
|
||||
$ss = { map { lc($_) => $ss->{$_} } keys %$ss }; # lowercase the keys
|
||||
return $ss;
|
||||
}
|
||||
if (!$ss && $self->{channel}) {
|
||||
die "Specified channel name is invalid";
|
||||
}
|
||||
}
|
||||
|
||||
PTDEBUG && _d('This server returns nothing for SHOW SLAVE STATUS');
|
||||
|
Reference in New Issue
Block a user