Commit 412f9da8 authored by unknown's avatar unknown
Browse files

- Added --verbose

- Made some of the warnings under --verbose only
- Added possibility to add mysqladmin= under groups [mysqldN]
  mysqladmin=... is no longer mandatory under [mysqld_multi]
- Made 'start', 'stop' and 'report' commands truly case-insensitive
- Some other common places code merge and cleanup

parent 84ad2489
Loading
Loading
Loading
Loading
+91 −68
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ use Getopt::Long;
use POSIX qw(strftime);

$|=1;
$VER="2.9";
$VER="2.10";

$opt_config_file   = undef();
$opt_example       = 0;
@@ -18,6 +18,7 @@ $opt_tcp_ip = 0;
$opt_user          = "root";
$opt_version       = 0;
$opt_silent        = 0;
$opt_verbose       = 0;

my $my_print_defaults_exists= 1;
my $logdir= undef();
@@ -42,13 +43,10 @@ sub main
  {
    # We can't throw out yet, since --version, --help, or --example may
    # have been given
    if (!$opt_silent)
    {
    print "WARNING! my_print_defaults command not found!\n";
    print "Please make sure you have this command available and\n";
    print "in your path. The command is available from the latest\n";
    print "MySQL distribution.\n";
    }
    $my_print_defaults_exists= 0;
  }
  if ($my_print_defaults_exists)
@@ -80,7 +78,7 @@ sub main
  }
  GetOptions("help","example","version","mysqld=s","mysqladmin=s",
             "config-file=s","user=s","password=s","log=s","no-log","tcp-ip",
             "silent")
             "silent","verbose")
  || die "Wrong option! See $my_progname --help for detailed information!\n";

  init_log() if (!defined($opt_log));
@@ -91,11 +89,6 @@ sub main
    exit(0);
  }
  example() if ($opt_example);
  if (!defined(($mysqladmin = my_which($opt_mysqladmin))))
  {
    print "Couldn't find the mysqladmin binary! Tried: $opt_mysqladmin\n";
    $flag_exit=1;
  }
  usage() if ($opt_help);
  if ($flag_exit)
  {
@@ -111,9 +104,9 @@ sub main
    exit(1);
  }
  usage() if (!defined($ARGV[0]) ||
	      ($ARGV[0] ne 'start' && $ARGV[0] ne 'START' &&
	       $ARGV[0] ne 'stop' && $ARGV[0] ne 'STOP' &&
	       $ARGV[0] ne 'report' && $ARGV[0] ne 'REPORT'));
	      (!($ARGV[0] =~ m/^start$/i) &&
	       !($ARGV[0] =~ m/^stop$/i) &&
	       !($ARGV[0] =~ m/^report$/i)));

  if (!$opt_no_log)
  {
@@ -126,27 +119,36 @@ sub main
    print strftime "%a %b %e %H:%M:%S %Y", localtime;
    print "\n";
  }
  if ($ARGV[0] eq 'report' || $ARGV[0] eq 'REPORT')
  {
    report_mysqlds();
  }
  elsif ($ARGV[0] eq 'start' || $ARGV[0] eq 'START')
  if ($ARGV[0] =~ m/^start$/i)
  {
    if (!defined(($mysqld = my_which($opt_mysqld))) && !$opt_silent)
    if (!defined(($mysqld= my_which($opt_mysqld))) && $opt_verbose)
    {
      print "WARNING: Couldn't find the default mysqld binary. ";
      print "WARNING: Couldn't find the default mysqld binary.\n";
      print "Tried: $opt_mysqld\n";
      print "This is OK, if you are using option --mysqld= under groups";
      print " [mysqldN] separately for each.\n";
      print "(Disable warnings with --silent)\n";
      print "This is OK, if you are using option \"mysqld=...\" in ";
      print "groups [mysqldN] separately for each.\n\n";
    }
    start_mysqlds();
  }
  else
  {
    if (!defined(($mysqladmin= my_which($opt_mysqladmin))) && $opt_verbose)
    {
      print "WARNING: Couldn't find the default mysqladmin binary.\n";
      print "Tried: $opt_mysqladmin\n";
      print "This is OK, if you are using option \"mysqladmin=...\" in ";
      print "groups [mysqldN] separately for each.\n\n";
    }
    if ($ARGV[0] =~ m/^report$/i)
    {
      report_mysqlds();
    }
    else
    {
      stop_mysqlds();
    }
  }
}

####
#### Init log file. Check for appropriate place for log file, in the following
@@ -196,7 +198,7 @@ sub init_log

sub report_mysqlds
{
  my (@groups, $com, $i, @options, $j, $pec);
  my (@groups, $com, $i, @options, $pec);

  print "Reporting MySQL servers\n";
  if (!$opt_no_log)
@@ -206,23 +208,7 @@ sub report_mysqlds
  @groups = &find_groups($groupids);
  for ($i = 0; defined($groups[$i]); $i++)
  {
    $com = "my_print_defaults";
    $com.= defined($opt_config_file) ? " --config-file=$opt_config_file" : "";
    $com.= " $groups[$i]";
    @options = `$com`;
    chop @options;

    $com = "$mysqladmin -u $opt_user";
    $com.= defined($opt_password) ? " -p$opt_password" : "";
    $com.= $opt_tcp_ip ? " -h 127.0.0.1" : "";
    for ($j = 0; defined($options[$j]); $j++)
    {
      if ((($options[$j] =~ m/^(\-\-socket\=)(.*)$/) && !$opt_tcp_ip) ||
	  ($options[$j] =~ m/^(\-\-port\=)(.*)$/))
      {
	$com.= " $options[$j]";
      }
    }
    $com= get_mysqladmin_options($i, @groups);
    $com.= " ping >> /dev/null 2>&1";
    system($com);
    $pec = $? >> 8;
@@ -261,7 +247,7 @@ sub report_mysqlds

sub start_mysqlds()
{
  my (@groups, $com, $tmp, $i, @options, $j);
  my (@groups, $com, $tmp, $i, @options, $j, $mysqld_found);

  if (!$opt_no_log)
  {
@@ -285,7 +271,11 @@ sub start_mysqlds()
    $com= "$mysqld";
    for ($j = 0, $tmp= ""; defined($options[$j]); $j++)
    {
      if ("--mysqld=" eq substr($options[$j], 0, 9))
      if ("--mysqladmin=" eq substr($options[$j], 0, 13))
      {
	# catch this and ignore
      }
      elsif ("--mysqld=" eq substr($options[$j], 0, 9))
      {
	$options[$j]=~ s/\-\-mysqld\=//;
	$com= $options[$j];
@@ -302,10 +292,10 @@ sub start_mysqlds()
    $com.= " &";
    if (!$mysqld_found)
    {
      print "\n\n";
      print "\n";
      print "FATAL ERROR: Tried to start mysqld under group [$groups[$i]], ";
      print "but no mysqld binary was found.\n";
      print "Please add --mysqld=... in group [mysqld_multi], or add it to ";
      print "Please add \"mysqld=...\" in group [mysqld_multi], or add it to ";
      print "group [$groups[$i]] separately.\n";
      exit(1);
    }
@@ -324,7 +314,7 @@ sub start_mysqlds()

sub stop_mysqlds()
{
  my (@groups, $com, $i, @options, $j);
  my (@groups, $com, $i, @options);

  if (!$opt_no_log)
  {
@@ -337,33 +327,65 @@ sub stop_mysqlds()
  @groups = &find_groups($groupids);
  for ($i = 0; defined($groups[$i]); $i++)
  {
    $com= get_mysqladmin_options($i, @groups);
    $com.= " shutdown";
    $com.= " >> $opt_log 2>&1" if (!$opt_no_log);
    $com.= " &";
    system($com);
  }
  if (!$i && !$opt_no_log)
  {
    w2log("No MySQL servers to be stopped (check your GNRs)",
	  "$opt_log", 0, 0);
  }
}

####
#### Sub function for mysqladmin option parsing
####

sub get_mysqladmin_options
{
  my ($i, @groups)= @_;
  my ($mysqladmin_found, $com, $tmp, $j);

  $com = "my_print_defaults";
  $com.= defined($opt_config_file) ? " --config-file=$opt_config_file" : "";
  $com.= " $groups[$i]";
  @options = `$com`;
  chop @options;

    $com = "$mysqladmin -u $opt_user";
    $com.= defined($opt_password) ? " -p$opt_password" : "";
    $com.= $opt_tcp_ip ? " -h 127.0.0.1" : "";
  $mysqladmin_found= 1; # The default
  $mysqladmin_found= 0 if (!length($mysqladmin));
  $com = "$mysqladmin";
  $tmp = " -u $opt_user";
  $tmp.= defined($opt_password) ? " -p$opt_password" : "";
  $tmp.= $opt_tcp_ip ? " -h 127.0.0.1" : "";
  for ($j = 0; defined($options[$j]); $j++)
  {
      if ((($options[$j] =~ m/^(\-\-socket\=)(.*)$/) && !$opt_tcp_ip) ||
    if ("--mysqladmin=" eq substr($options[$j], 0, 13))
    {
      $options[$j]=~ s/\-\-mysqladmin\=//;
      $com= $options[$j];
      $mysqladmin_found= 1;
    }
    elsif ((($options[$j] =~ m/^(\-\-socket\=)(.*)$/) && !$opt_tcp_ip) ||
	   ($options[$j] =~ m/^(\-\-port\=)(.*)$/))
    {
	$com.= " $options[$j]";
      $tmp.= " $options[$j]";
    }
  }
    $com.= " shutdown";
    $com.= " >> $opt_log 2>&1" if (!$opt_no_log);
    $com.= " &";
    system($com);
  }
  if (!$i && !$opt_no_log)
  if (!$mysqladmin_found)
  {
    w2log("No MySQL servers to be stopped (check your GNRs)",
	  "$opt_log", 0, 0);
    print "\n";
    print "FATAL ERROR: Tried to use mysqladmin in group [$groups[$i]], ";
    print "but no mysqladmin binary was found.\n";
    print "Please add \"mysqladmin=...\" in group [mysqld_multi], or ";
    print "in group [$groups[$i]].\n";
    exit(1);
  }
  $com.= $tmp;
  return $com;
}

####
@@ -702,6 +724,7 @@ Options:
                   file is turned on.
--password=...     Password for user for mysqladmin.
--silent           Disable warnings.
--verbose          Be more verbose.
--tcp-ip           Connect to the MySQL server(s) via the TCP/IP port instead
                   of the UNIX socket. This affects stopping and reporting.
                   If a socket file is missing, the server may still be