非增量每日备份
- 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^
- Hots
- 评论
- 发表评论:
- Tags
- Apache C Emacs FreeBSD GODADDY MySQL Newage Nginx Perl Subversion UNIX WEB WINDOWS 单曲 数据库 服务器 网络 读书 随写 音乐
- 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.





