ZALOHA MYSQL
Petr Vileta
stoupa na practisoft.cz
Pátek Prosinec 10 14:59:41 CET 2004
>> Ako njednoduchsie odzalohovat databzu mysql nejak pochopitelne aj pre
>> laika.
>
> mysqldump - viz. dokumentace k MySQL.
Proc to vsichni delaji tak slozite? :-)
Ja na to pouzivam perlovsky skript:
#!/usr/bin/perl
use CGI qw(:cgi);
use DBI;
$pathcfg = "/var/backup/"; # kam se ulozi uzivatelske databaze
$pathbkp = "/var/backup/MySQL/"; #kam se ulozi databaze MySQL
open STDERR,">&STDOUT";
print "---------Backup databazi---------\n";
$host= "localhost";
$myddb="";
$opt_user="root";
$opt_password="heslo";
$dbh = DBI->connect("DBI:mysql:$mydb:$host",$opt_user,$opt_password) or die
"Nelze se pripojit: $DBI::errstr\n";
$sth=$dbh->prepare("show databases");
$sth->execute() or print "Nelze ziskat seznam databazi\n";
$dbfs=$sth->fetchall_arrayref([0]);
$sth->finish;
for $d (0 .. $#{$dbfs})
{
$dbf=$dbfs->[$d][0];
next if($dbf eq 'mysql');
$dir=$pathbkp . $dbf;
if(stat($dir)*1==0)
{
mkdir $dir;
chown((getpwnam('mysql'))[2,3],$dir);
}
$sth=$dbh->do("use $dbf");
$sth=$dbh->prepare("show tables");
$sth->execute() or print "Nelze ziskat seznam tabulek z databaze
$dbf\n";
$tables=$sth->fetchall_arrayref([0]);
$sth->finish;
for $t (0 .. $#{$tables})
{
$tbl=$tables->[$t][0];
$sth=$dbh->do("lock tables $tbl write");
$sth=$dbh->prepare("backup table $tbl to \'$dir\'");
$sth->execute() or print "Nelze zalohovat tabulku $t do $dir\n";
$row=$sth->fetchrow_arrayref;
print "$row->[0] $row->[2] $row->[3]\n";
$sth->finish;
$sth=$dbh->do("unlock tables");
}
}
$rc=$dbh->disconnect;
print "---------Backup databazi konec---------\n";
Ty printy je mozne vynechat.
No a pokud potrebuji ze zalohy obnovit, tak pouziju:
USE nejaka_databaze;
DROP TABLE nejaka_tabulka;
RESTORE TABLE zalohovana_tabulka FROM '/cesta_k_zaloze';
--
Petr
Na mail uvedeny v headeru zpravy nema cenu nic posilat, konci to v PR* :-)
Odpovidejte na petr na practisoft cz
Další informace o konferenci Linux