Home > Notes > 非增量每日备份

非增量每日备份

Tue, 23 Jun 2009 13:55:56 +0800

被FSCK搞怕了,所以得每天都备份(之前都是1个星期才备份一次-_-!)。现在就写了个备份的脚本,让服务器每天自动备份

备份是通过FTP来的,所以首先建立一个backup用户
useradd -g sites -d /backups -s /usr/sbin/nologin backup
passwd backup
*****
*****
update successfully...

然后使用以下脚本进行备份到本地:
vi backup-server.pl

#/usr/bin/perl -w

#backup server scripts

#files
$datadir = "/www";
@fl = ("www.lewphee.com");
@db = ("dbname"); #数据库
$pswd = "*****"; #root 密码

#backup directory
$bto = '/backups';
$bto1 = '/backups';
my ($sec,$min,$hour,$mday,$mon,$year,
          $wday,$yday,$isdst) = localtime time;

$bto = sprintf("$bto/%4d%02d%02d/", $year+1900, $mon+1, $mday);
if (!-e $bto) {
    system("mkdir -p ".$bto);
}

foreach (@fl){
    system("cd $datadir;tar -czf ".$bto.$_.".tar.gz ".$_);
    system("echo \"".localtime(time)." tar ".$datadir."/".$_." ok.\" >> /logs/backup.log");
}

#database
foreach (@db){
    #登录数据库服务器并完全备份数据库成一个压缩文件
    system("/usr/local/mysql/bin/mysqldump -uroot -p".$pswd." -S /tmp/mysql.sock -R --add-drop-database=TRUE ".$_." | gzip > ".$bto.$_.".sql.gz");
    system("echo \"".localtime(time)." database ".$_." backup successfully\" >> /logs/backup.log");
}

#now, tar the directory.
system("cd ".$bto1.";tar -czf ".sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday).".tar.gz ".sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday));
system("rm -rf ".$bto);
system("echo \"".localtime(time)."backup total successfully\" >> /logs/backup.log");

这样,本地要备份的数据库和文件目录,只用在@fl和@db数组添加就可以了。
本地备份完成了,但我们得从别的服务器里拷回这些备份,不然只在本地备份就等于没备份!

之前建立的FTP帐号派上用场了----我们同样用脚本登录FTP进行数据下载:

vi backup-client.pl

#/usr/bin/perl -w

use Net::FTP;

#backup remote server's file to local

#local backup dir
$dir = "/backups/";

#remote server
$server = "server.name.here";

#ftp parameters
$user = "backup";
$pswd = "****";

$ftp = Net::FTP->new($server, Debug=>0) or die("can't connect to $server:$@");
$ftp->login($user, $pswd);
$ftp->cwd("/");

my ($sec,$min,$hour,$mday,$mon,$year,
          $wday,$yday,$isdst) = localtime time;

$file = sprintf("%04d%02d%02d.tar.gz", $year+1900, $mon+1, $mday);

$ftp->binary();
$ftp->get($file, $dir.$server."-".$file);
system("echo \"".localtime(time)." backup remote ".$server." total successfully\" >> /logs/backup.log");
$ftp->quit();

最后,在主数据服务器里的crontab里设置每日0时备份
crontab -e
0 0 * * * (perl /tools/backup-server.pl)

远程备份服务器(有延迟,因为不可能同时运行,那边还没压缩完呢):
crontab -e
30 0 * * * (perl /tools/backup-client.pl)

这样,就可以做到天天备份,不用怕down机了(不down肯定好过down的,我意思是说,不怕down机找不回数据了)^o^

Tag:UNIX, 服务器
Hots
评论
发表评论:


  [TIPS:首次发表评论的朋友,需要验证]
Tags
Recent Post
Recent Comments
Links
Copyright Notes
You can reship all of these articles without permission but MUST mark the original link in your post. Please contact with me() if u have advice or other arrangements.
Copyright©2007-2011 lewphee.com All rights reserved.