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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
xaker1
сержант
Сообщения: 204
Зарегистрирован: 2010-03-10 21:26:33

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

Непрочитанное сообщение xaker1 » 2010-03-15 13:37:20

Может у кого есть сабж? интересует на perl\bash.
Ну или может кто может написать "за пиво".

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-03-15 13:46:42

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

#!/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();

}

 
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение