~percona-toolkit-dev/percona-toolkit/fix-password-comma-bug-886077

« back to all changes in this revision

Viewing changes to lib/MySQLConfig.pm

  • Committer: Daniel Nichter
  • Date: 2012-02-07 20:10:11 UTC
  • mfrom: (174 2.0)
  • mto: This revision was merged to the branch mainline in revision 189.
  • Revision ID: daniel@percona.com-20120207201011-sok2c1f2ay9qr3gm
Merge trunk r174.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
use strict;
39
39
use warnings FATAL => 'all';
40
40
use English qw(-no_match_vars);
41
 
use constant MKDEBUG => $ENV{MKDEBUG} || 0;
 
41
use constant PTDEBUG => $ENV{PTDEBUG} || 0;
42
42
 
43
43
my %can_be_duplicate = (
44
44
   replicate_wild_do_table     => 1,
112
112
   elsif ( my $dbh = $args{dbh} ) {
113
113
      $config_data{format} = $args{format} || 'show_variables';
114
114
      my $sql = "SHOW /*!40103 GLOBAL*/ VARIABLES";
115
 
      MKDEBUG && _d($dbh, $sql);
 
115
      PTDEBUG && _d($dbh, $sql);
116
116
      my $rows = $dbh->selectall_arrayref($sql);
117
117
      $config_data{vars} = { map { @$_ } @$rows };
118
118
      $config_data{mysql_version} = _get_version($dbh);
131
131
      die "I need a $arg arugment" unless $args{$arg};
132
132
   }
133
133
   my ($output) = @args{@required_args};
134
 
   MKDEBUG && _d("Parsing config output");
 
134
   PTDEBUG && _d("Parsing config output");
135
135
 
136
136
   my $format = $args{format} || detect_config_output_format(%args);
137
137
   if ( !$format ) {
189
189
        || $output =~ m/Variable_name:\s+\w+/
190
190
        || $output =~ m/Variable_name\s+Value$/m )
191
191
   {
192
 
      MKDEBUG && _d('show variables format');
 
192
      PTDEBUG && _d('show variables format');
193
193
      $format = 'show_variables';
194
194
   }
195
195
   elsif (    $output =~ m/Starts the MySQL database server/
196
196
           || $output =~ m/Default options are read from /
197
197
           || $output =~ m/^help\s+TRUE /m )
198
198
   {
199
 
      MKDEBUG && _d('mysqld format');
 
199
      PTDEBUG && _d('mysqld format');
200
200
      $format = 'mysqld';
201
201
   }
202
202
   elsif ( $output =~ m/^--\w+/m ) {
203
 
      MKDEBUG && _d('my_print_defaults format');
 
203
      PTDEBUG && _d('my_print_defaults format');
204
204
      $format = 'my_print_defaults';
205
205
   }
206
206
   elsif ( $output =~ m/^\s*\[[a-zA-Z]+\]\s*$/m ) {
207
 
      MKDEBUG && _d('option file format');
 
207
      PTDEBUG && _d('option file format');
208
208
      $format = 'option_file',
209
209
   }
210
210
 
246
246
      my ($opt_files) = $output =~ m/\G^(.+)\n/m;
247
247
      my %seen;
248
248
      my @opt_files = grep { !$seen{$_} } split(' ', $opt_files);
249
 
      MKDEBUG && _d('Option files:', @opt_files);
 
249
      PTDEBUG && _d('Option files:', @opt_files);
250
250
   }
251
251
   else {
252
 
      MKDEBUG && _d("mysqld help output doesn't list option files");
 
252
      PTDEBUG && _d("mysqld help output doesn't list option files");
253
253
   }
254
254
 
255
255
   # The list of sys vars and their default vals begins like:
260
260
   #   abort-slave-event-count           0
261
261
   # So we search for that line of hypens.
262
262
   if ( $output !~ m/^-+ -+$/mg ) {
263
 
      MKDEBUG && _d("mysqld help output doesn't list vars and vals");
 
263
      PTDEBUG && _d("mysqld help output doesn't list vars and vals");
264
264
      return;
265
265
   }
266
266
 
356
356
         # be duplicated.  We don't have its value yet (next loop iter),
357
357
         # so we set a flag to indicate that we should save the duplicate value.
358
358
         if ( exists $config{$var} && !$can_be_duplicate{$var} ) {
359
 
            MKDEBUG && _d("Duplicate var:", $var);
 
359
            PTDEBUG && _d("Duplicate var:", $var);
360
360
            $duplicate_var = 1;  # flag on, save all the var's values
361
361
         }
362
362
      }
363
363
      else {
364
364
         # $var is set so this item should be its value.
365
365
         my $val = $item;
366
 
         MKDEBUG && _d("Var:", $var, "val:", $val);
 
366
         PTDEBUG && _d("Var:", $var, "val:", $val);
367
367
 
368
368
         # Avoid crashing on undef comparison.  Also, SHOW VARIABLES uses
369
369
         # blank strings, not NULL/undef.
451
451
sub _slurp_file {
452
452
   my ( $file ) = @_;
453
453
   die "I need a file argument" unless $file;
454
 
   MKDEBUG && _d("Reading", $file);
 
454
   PTDEBUG && _d("Reading", $file);
455
455
   open my $fh, '<', $file or die "Cannot open $file: $OS_ERROR";
456
456
   my $contents = do { local $/ = undef; <$fh> };
457
457
   close $fh;
463
463
   return unless $dbh;
464
464
   my $version = $dbh->selectrow_arrayref('SELECT VERSION()')->[0];
465
465
   $version =~ s/(\d\.\d{1,2}.\d{1,2})/$1/;
466
 
   MKDEBUG && _d('MySQL version', $version);
 
466
   PTDEBUG && _d('MySQL version', $version);
467
467
   return $version;
468
468
}
469
469