Страница 1 из 1

ремонт и оптимизация mysql таблиц.

Добавлено: 2010-03-15 13:37:20
xaker1
Может у кого есть сабж? интересует на perl\bash.
Ну или может кто может написать "за пиво".

Скрипт под рутом должен получить список всех бд, пройтись по всем базам, проверить все таблици, и если нужно отремонтировать их и оптимизировать (в идеале скрипт должен запускаться с параметрами, т.е. например параметр -o означает оптимизацию таблици, если необходимо, -r ремонт таблици, -u пользователь под которым входить в mysql, -p его пароль.)

Re: ремонт и оптимизация mysql таблиц.

Добавлено: 2010-03-15 13:46:42
ProFTP

Код: Выделить всё

#!/usr/bin/perl

# email: rtyug@ukr.net

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};

    my $dbh = DBI->connect(
        "DBI:$db_type:database=$db_name;host=$db_host",
        $db_user,
        $db_pass

    );

    my $loop_data2;

    eval {

        my $sth = $dbh->prepare('show tables');
        $sth->execute();

        while ( my @row = $sth->fetchrow_array ) {

            die "bad table name: $row[0]" unless $row[0] =~ /^[w_]+$/;
            push @{$loop_data2}, $row[0];

        }

    };

    next if ($@);

    foreach $_ ( @{$loop_data2} ) {
        $dbh->do( qq{REPAIR TABLE $_ } );
    }

    $dbh->disconnect();

}

 

Re: ремонт и оптимизация mysql таблиц.

Добавлено: 2010-03-15 16:58:56
xaker1
Спасибо огромное!