本文要讲到的情况需要以下资源以及配置:
- linux系统服务器两台(跑业务的一台,专门用来备份的一台,防止出现跑路或者硬盘损坏的情况造成数据丢失)
- 主服务器上运行网站以及mysql数据库,如果使用的是其他数据库或者需要备份的是其他文件,自行进行小修改即可
- 主服务器开启rsync daemon,提前做好设置
- 主服务器建立~/backup/文件夹,并在~/backup/文件夹下建立latest, old, weekly, monthly四个文件夹
- 主服务器建立一个有dump权限的mysql用户,本例中用户名为backup
本文中介绍的方法能实现的功能:
- 主服务器上每天对网站文件以及数据库进行自动备份,保留最近5日的备份记录,最近一周的周备份,最近一月的月备份
- 主服务器上自动删除过期的备份文件
- 在备份服务器上每日对主服务器的备份文件进行同步,并保留月备份记录不会自动删除
实现方法:
首先,在主服务器上建立文件~/backup.sh
内容如下(注意所有需要自行修改部分以xxxxxxxx代替):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 |
然后在主服务器上使用crontab设置自动执行脚本:
1 2 3 4 5 6 | 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/ #其中脚本执行时间可以自行设定 |
接下来再备份服务器上使用crontab设置自动同步脚本:
1 2 | 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/ |
近期评论