本人是新手,以下方法仅供参考

本文要讲到的情况需要以下资源以及配置:

  • linux系统服务器两台(跑业务的一台,专门用来备份的一台,防止出现跑路或者硬盘损坏的情况造成数据丢失)
  • 主服务器上运行网站以及mysql数据库,如果使用的是其他数据库或者需要备份的是其他文件,自行进行小修改即可
  • 主服务器开启rsync daemon,提前做好设置
  • 主服务器建立~/backup/文件夹,并在~/backup/文件夹下建立latest, old, weekly, monthly四个文件夹
  • 主服务器建立一个有dump权限的mysql用户,本例中用户名为backup

本文中介绍的方法能实现的功能:

  • 主服务器上每天对网站文件以及数据库进行自动备份,保留最近5日的备份记录,最近一周的周备份,最近一月的月备份
  • 主服务器上自动删除过期的备份文件
  • 在备份服务器上每日对主服务器的备份文件进行同步,并保留月备份记录不会自动删除

实现方法:

首先,在主服务器上建立文件~/backup.sh

内容如下(注意所有需要自行修改部分以xxxxxxxx代替):

[cc lang=’bash’]
clear
password=’xxxxxxxx’
#设置mysql密码变量
echo “backup started”
echo “moving old backup file…”
mv ~/backup/latest/* ~/backup/old/
echo “making temporary directory…”
mkdir ~/backupsql
echo “dumping mysql database…”
mysqldump -ubackup -p$password 数据库名 > ~/backupsql/xxxxxxxx.sql
#如果有多个数据库可以写多条以上语句
echo “dumping completed”
DATE=`date +%Y-%m-%d-%H%M`
echo “packing all files…please wait”
tar czf ~/backup/latest/xxxxxxxx.backup.$DATE.tar.gz ~/backupsql/ /var/www/
#其中/var/www/为web文件目录,根据需要自行修改
echo “packing completed”
rm ~/backupsql/ -rf
echo “temporary directory removed”
DATEE=`date -d -5day +%Y-%m-%d`
rm ~/backup/old/xxxxxxxx.backup.$DATEE* -rf
echo “old backup files removed”
password=”
echo “backup finished.”
echo ~/backup/latest/xxxxxxxx.backup.$DATE.tar.gz
[/cc]

然后在主服务器上使用crontab设置自动执行脚本:

[cc lang=’bash’]
0 0 * * * ~/backup.sh
0 0 1 * * rm ~/backup/monthly/* -rf
2 0 1 * * cp ~/backup/latest/* ~/backup/monthly/
0 0 * * 1 rm ~/backup/weekly/* -rf
2 0 * * 1 cp ~/backup/latest/* ~/backup/weekly/
#其中脚本执行时间可以自行设定
[/cc]

接下来再备份服务器上使用crontab设置自动同步脚本:

[cc lang=’bash’]
2 4 * * * rsync -av –delete –progress rsync://xxxxxxxx@xxx.xxx.xxx.xxx/xxxxxxxx ~/backup/xxxxxxxx/backup –password-file=/etc/xxxxxxxx >> xxxxxxxx;
0 5 1 * * cp ~/backup/xxxxxxxx/backup/latest/* ~/backup/xxxxxxxx/safebox/
[/cc]