mirror of
https://github.com/MariaDB/server.git
synced 2025-05-07 04:01:59 +03:00
104 lines
3.1 KiB
Perl
104 lines
3.1 KiB
Perl
#!/usr/bin/perl -w
|
|
|
|
# Copyright (C) 2005 MySQL AB
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
|
|
|
use strict;
|
|
|
|
if(@ARGV < 1)
|
|
{
|
|
print STDERR "Usage:\n";
|
|
print STDERR "\tndb_error_reporter config.ini [username] [--fs]\n\n";
|
|
print STDERR "\tusername is a user that you can use to ssh into\n";
|
|
print STDERR "\t all of your nodes with.\n\n";
|
|
print STDERR "\t--fs means include the filesystems in the report\n";
|
|
print STDERR "\t WARNING: This may require a lot of disk space.\n";
|
|
print STDERR "\t Only use this option when asked to.\n\n";
|
|
exit(1);
|
|
}
|
|
|
|
my $config_file= $ARGV[0];
|
|
my $config_get_fs= 0;
|
|
my $config_username= '';
|
|
if(defined($ARGV[1]))
|
|
{
|
|
$config_get_fs= 1 if $ARGV[1] eq '--fs';
|
|
$config_username= $ARGV[1].'@' if $ARGV[1] ne '--fs';
|
|
$config_get_fs= (defined $ARGV[2] && $ARGV[2] eq '--fs')?1:$config_get_fs;
|
|
}
|
|
|
|
if(!stat($config_file))
|
|
{
|
|
print STDERR "Cannot open configuration file.\n\n";
|
|
exit(1);
|
|
}
|
|
|
|
my @nodes= split ' ',`ndb_config --config-file=$ARGV[0] --nodes --query=id --type=ndbd`;
|
|
|
|
push @nodes, split ' ',`ndb_config --config-file=$ARGV[0] --nodes --query=id --type=ndb_mgmd`;
|
|
|
|
sub config {
|
|
my $nodeid= shift;
|
|
my $query= shift;
|
|
my $res= `ndb_config --config-file=$ARGV[0] --id=$nodeid --query=$query`;
|
|
chomp $res;
|
|
$res;
|
|
}
|
|
|
|
my @t= localtime();
|
|
my $reportdir= sprintf('ndb_error_report_%u%02u%02u%02u%02u%02u',
|
|
($t[5]+1900),($t[4]+1),$t[3],$t[2],$t[1],$t[0]);
|
|
|
|
if(stat($reportdir) || stat($reportdir.'tar.bz2'))
|
|
{
|
|
print STDERR "It looks like another ndb_error_report process is running.\n";
|
|
print STDERR "If that is not the case, remove the ndb_error_report directory";
|
|
print STDERR " and run ndb_error_report again.\n\n";
|
|
exit(1);
|
|
}
|
|
|
|
mkdir($reportdir);
|
|
|
|
foreach my $node (@nodes)
|
|
{
|
|
print "\n\n Copying data from node $node".
|
|
(($config_get_fs)?" with filesystem":"").
|
|
"\n\n";
|
|
my $recurse= ($config_get_fs)?'-r ':'';
|
|
system 'scp -p '.$recurse.$config_username.config($node,'host').
|
|
':'.config($node,'datadir')."/ndb_".$node."* ".
|
|
"$reportdir/\n";
|
|
}
|
|
|
|
print "\n\n Copying configuration file...\n\n\t$config_file\n\n";
|
|
system "cp -p $config_file $reportdir/";
|
|
|
|
my $r = system 'bzip2 2>&1 > /dev/null < /dev/null';
|
|
my $outfile;
|
|
if($r==0)
|
|
{
|
|
$outfile= "$reportdir.tar.bz2";
|
|
system "tar c $reportdir|bzip2 > $outfile";
|
|
}
|
|
else
|
|
{
|
|
$outfile= "$reportdir.tar.gz";
|
|
system "tar c $reportdir|gzip > $outfile";
|
|
}
|
|
|
|
system "rm -rf $reportdir";
|
|
|
|
print "\n\nPlease attach $outfile to your error report\n\n";
|