Страница 1 из 1
мониторинг убитых таблиц
Добавлено: 2009-11-04 15:26:29
weec
бывает такаие ситуации когда сервер не в состоянии автоматом залечить поврежденную таблицу, о чем он пишет в *.err лог
есть ли возможность мониторить такие ситуации не глядя в лог?
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 15:37:07
zg
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 15:50:57
weec
не то
перефразирую
есть ли какие консольные тулзы для сабжа?
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 16:08:03
zg
weec писал(а):есть ли какие консольные тулзы для сабжа?
http://dev.mysql.com/doc/refman/5.1/en/ ... table.html
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 16:16:26
ProFTP
weec писал(а):бывает такаие ситуации когда сервер не в состоянии автоматом залечить поврежденную таблицу, о чем он пишет в *.err лог
есть ли возможность мониторить такие ситуации не глядя в лог?
вот я писал скрипт который исправляет таблицу, во всех базах
только возможно нужно переделать, напрмиер, проверить все таблицы во все базах на поврежденность, если какая-то поврежденная, то восстановить ее...
Код: Выделить всё
#!/usr/bin/perl
use DBI;
my $db_name = 'mysql';
# user from db
my $db_user = 'root';
my $db_pass = '';
my $db_type = 'mysql';
my $db_host = 'localhost';
my $dbh = DBI->connect(
"DBI:$db_type:database=$db_name;host=$db_host",
$db_user,
$db_pass,
{ RaiseError => 1,
PrintError => 1 }
) || die $DBI::errstr;
my $sth = $dbh->prepare(
'select Db from db'
);
$sth->execute();
my $loop_data;
push @{$loop_data}, $_ while $_ = $sth->fetchrow_hashref();
$sth->finish();
$dbh->disconnect();
foreach my $ii( @{$loop_data}) {
my $db_name = $ii->{Db};
# user from db
my $db_user = 'root';
my $db_pass = '';
my $db_type = 'mysql';
my $db_host = 'localhost';
my $dbh = DBI->connect(
"DBI:$db_type:database=$db_name;host=$db_host",
$db_user,
$db_pass
);
my $loop_data2 ;
eval {
#my $loop_data2 = $dbh->selectrow_hashref(
# "show tables",
# { undef }
#);
my $sth = $dbh->prepare(
'show tables' );
$sth->execute();
# push @{$loop_data2}, $_ while $_ = $sth->fetchrow_hashref();
# $sth->finish();
while( my @row = $sth->fetchrow_array ) {
die "bad table name: $row[0]" unless $row[0] =~ /^[w_]+$/;
push @{$loop_data2}, $row[0];
}
};
if ($@) {
next;
}
# use Data::Dumper;
# print Dumper($loop_data2);
# return;
# my $sth = $dbh->prepare(
# 'show tables'
# );
# $sth->execute();
# my $rows;
#while( my @row = $sth->fetchrow_array ) {
#
#die "bad table name: $row[0]" unless $row[0] =~ /^[\w_]+$/;
#push @{$rows}, $row[0];
#}
# $sth->finish();
foreach $_( @{$loop_data2}) {
$dbh->do(qq{REPAIR TABLE $_ },
undef, undef);
}
# use Data::Dumper;
# print Dumper($loop_data2);
# return;
$dbh->disconnect();
}
# use Data::Dumper;
# print Dumper($rows);
# print "@{[%$rows]}\n";
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 16:22:30
weec
с предварительным анализом все ясно (меня он не интересует)
а вот отмечает ли сам сервер данные о текущих поврежденных таблицах в status-выводах?
думаю если есть автоматические анализаторы таблиц, возможно данные об их работе отображаются не только в лог-файлах
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 16:27:23
ProFTP
не видел...
===
интересно, а почему нужно не смотреть .err?
как раз можно смотреть через 1 минуты, по кускам смотреть, если есть ошибки, то справлять...
или меньше минуты, если надо, через 20 сек.- демон написать
Re: мониторинг убитых таблиц
Добавлено: 2009-11-04 19:02:11
zg
weec писал(а):а вот отмечает ли сам сервер данные о текущих поврежденных таблицах в status-выводах?
только через анализ таблиц
weec писал(а):думаю если есть автоматические анализаторы таблиц, возможно данные об их работе отображаются не только в лог-файлах
автоматом чекаются только InnoDB, для MyISAM есть myisamchk
Код: Выделить всё
If you are not in the database directory, you can check all the tables
there by specifying the path to the directory:
shell> myisamchk /path/to/database_dir/*.MYI
или нужно что-то другое?
если надо отловить, когда запись падает в лог, то юзай