首页 > 学习笔记 > 非增量每日备份

非增量每日备份

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^

标签:UNIX, 服务器
热门文章
评论
发表评论:


  [TIPS:首次发表评论的朋友,需要验证]
标签
最近发表
最新评论
连接
版权说明
任何转载,无需经过许可,但必须注明来源地址。如有任何建议或意见,请联系
Copyright©2007-2009 lewphee.com All rights reserved.