From 26cf65015ca9ffad7fdda471983cdb9eb2ac1750 Mon Sep 17 00:00:00 2001 From: Carlos Salguero Date: Wed, 6 Jul 2016 20:41:42 -0300 Subject: [PATCH] BUG-1595678 Updated MasterSlave lib into binaries Also updated a 'SHOW PROCESSLIST' to 'SHOW FULL PROCESSLIST' because pt-kill needs more than 100 chars in the info field. --- bin/pt-archiver | 45 ++++++++++++++++++++++--------------- bin/pt-heartbeat | 45 ++++++++++++++++++++++--------------- bin/pt-kill | 43 +++++++++++++++++++++-------------- bin/pt-online-schema-change | 4 ++-- bin/pt-query-digest | 16 ++++++++++--- bin/pt-slave-find | 45 ++++++++++++++++++++++--------------- bin/pt-slave-restart | 45 ++++++++++++++++++++++--------------- bin/pt-table-checksum | 45 ++++++++++++++++++++++--------------- bin/pt-table-sync | 45 ++++++++++++++++++++++--------------- lib/MasterSlave.pm | 2 +- 10 files changed, 204 insertions(+), 131 deletions(-) diff --git a/bin/pt-archiver b/bin/pt-archiver index 445e44bc..7a1832c7 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -3505,23 +3505,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -3557,7 +3556,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -3565,7 +3565,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -3763,7 +3772,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index 393aaf14..b1991b44 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -112,23 +112,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -164,7 +163,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -172,7 +172,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -370,7 +379,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-kill b/bin/pt-kill index 2915feb6..2879cb0a 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -3775,23 +3775,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -3827,7 +3826,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -3835,7 +3835,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index b0fb1a15..5363d016 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -4111,7 +4111,7 @@ sub get_slaves { } my ($dbh, $dsn) = @args{@required_args}; my $o = $self->{OptionParser}; - + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -4326,7 +4326,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 39f52b79..ae33df39 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -10436,7 +10436,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -10444,7 +10445,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -10642,7 +10652,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-slave-find b/bin/pt-slave-find index e80a4cff..02e15dfe 100755 --- a/bin/pt-slave-find +++ b/bin/pt-slave-find @@ -2212,23 +2212,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -2264,7 +2263,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -2272,7 +2272,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -2470,7 +2479,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index 3de9e51b..a0406caa 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -2623,23 +2623,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -2675,7 +2674,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -2683,7 +2683,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -2881,7 +2890,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index b5892ec0..2162e508 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -5003,23 +5003,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -5055,7 +5054,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -5063,7 +5063,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -5261,7 +5270,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 9f2d1196..177c34ed 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -6585,23 +6585,22 @@ use warnings FATAL => 'all'; use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; -sub check_recursion_method { +sub check_recursion_method { my ($methods) = @_; - - if ( @$methods != 1 ) { - if ( grep({ !m/processlist|hosts/i } @$methods) - && $methods->[0] !~ /^dsn=/i ) - { - die "Invalid combination of recursion methods: " - . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " - . "Only hosts and processlist may be combined.\n" - } - } - else { + if ( @$methods != 1 ) { + if ( grep({ !m/processlist|hosts/i } @$methods) + && $methods->[0] !~ /^dsn=/i ) + { + die "Invalid combination of recursion methods: " + . join(", ", map { defined($_) ? $_ : 'undef' } @$methods) . ". " + . "Only hosts and processlist may be combined.\n" + } + } + else { my ($method) = @$methods; - die "Invalid recursion method: " . ( $method || 'undef' ) - unless $method && $method =~ m/^(?:processlist$|hosts$|none$|dsn=)/i; - } + die "Invalid recursion method: " . ( $method || 'undef' ) + unless $method && $method =~ m/^(?:processlist$|hosts$|none$|cluster$|dsn=)/i; + } } sub new { @@ -6637,7 +6636,8 @@ sub get_slaves { die "I need a $arg argument" unless $args{$arg}; } my ($dbh, $dsn) = @args{@required_args}; - + my $o = $self->{OptionParser}; + $self->recurse_to_slaves( { dbh => $dbh, dsn => $dsn, @@ -6645,7 +6645,16 @@ sub get_slaves { my ( $dsn, $dbh, $level, $parent ) = @_; return unless $level; PTDEBUG && _d('Found slave:', $dp->as_string($dsn)); - push @$slaves, $make_cxn->(dsn => $dsn, dbh => $dbh); + my $slave_dsn = $dsn; + if ($o->got('slave-user')) { + $slave_dsn->{u} = $o->get('slave-user'); + PTDEBUG && _d("Using slave user ".$o->get('slave-user')." on ".$slave_dsn->{h}.":".$slave_dsn->{P}); + } + if ($o->got('slave-password')) { + $slave_dsn->{p} = $o->get('slave-password'); + PTDEBUG && _d("Slave password set"); + } + push @$slaves, $make_cxn->(dsn => $slave_dsn, dbh => $dbh); return; }, } @@ -6843,7 +6852,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); grep { $_->{command} =~ m/Binlog Dump/i } map { # Lowercase the column names diff --git a/lib/MasterSlave.pm b/lib/MasterSlave.pm index 5f51a456..406c5259 100644 --- a/lib/MasterSlave.pm +++ b/lib/MasterSlave.pm @@ -352,7 +352,7 @@ sub get_connected_slaves { die "You do not have the PROCESS privilege"; } - $sql = 'SHOW PROCESSLIST'; + $sql = 'SHOW FULL PROCESSLIST'; PTDEBUG && _d($dbh, $sql); # It's probably a slave if it's doing a binlog dump. grep { $_->{command} =~ m/Binlog Dump/i }