我觉得LAMP做的网站只需要备份mysql数据库和wordpress的目录就可以了,所以后面只备份了这两个东西。方法很简单,就是写一个脚本通过scp把备份的文件传到另一台主机,然后利用cron每天定时执行脚本。
首先得先有一台放备份文件的主机,我用的是帮帮给我的一个虚拟机(如果帮帮能看到的话,在此致谢),以前在网上看到过有人利用百度云来备份网站,等有空研究研究,百度云3GB的免费空间可真是不小。
1.备份mysql数据库,用mysqldump备份成sql语句:
- mysqldump -uUSERNAME -pPASSWORD DBNAME > MYSQL_FILE_NAME.sql
2.备份wordpress和log日志:
- tar -zcvf WORDPRESS_FILE_NAME.tar.gz /var/www /var/log
3.通过scp将文件传到备份主机,确保备份主机已开启ssh服务
- scp -P10086 MYSQL_FILE_NAME.sql WORDPRESS_FILE_NAME.tar.gz username@IP:/home/username/backup
4.发送邮件通知,安装sendmail,通过sendmail命令发送简单的通知邮件
- (echo “Subject: Report from the ALIYUN”;echo “The backup is finished !”;echo $DATE) | sendmail -f ALI@root.com -t abc@123.com
5.删除应用服务器上的备份文件,节省空间:
- rm -rf MYSQL_FILE_NAME.sql WORDPRESS_FILE_NAME.tar.gz
6.把以上过程整理成一个脚本:
- #!/bin/bash
- #filename:backup.sh
- #function:LAMP_BACK
- #author:paulyan
- #date:2014.04.27
- DATE=`date +%Y%m%d_%H%M%S`
- MYSQL_FILE_NAME=/root/mysql_back_$DATE.sql
- MYSQL_USERNAME=username
- MYSQL_PASSWORD=password
- WORDPRESS_FILE_NAME=/root/wordpress_back_$DATE.tar.gz
- #backup mysql and wordpress
- mysqldump -u$MYSQL_USERNAME -p$MYSQL_PASSWORD wordpress > $MYSQL_FILE_NAME
- tar -zcvf $WORDPRESS_FILE_NAME /var/www /var/log
- #scp to bangbang’host
- scp -P10086 $MYSQL_FILE_NAME $WORDPRESS_FILE_NAME username@IP:/home/paul/ALIYUN_BACKUP
- #mail2me
- (echo “Subject: Report from the ALIYUN”;echo “The backup is finished !”;echo $DATE) | sendmail -f ALI@root.com -t abc@123.com
- #delete files
- rm -rf mysql_back* wordpress_back*
7.在cron中加入执行backup.sh计划,每天凌晨一点执行备份,打开/etc/crontab添加:
- 0 1 * * * root /root/backup.sh
遇到的几个问题(坑):
如果ssh端口不是默认的22,需要在scp命令后跟参数 -P端口,此参数要跟着scp之后,不可在备份主机IP之后
注意QQ邮箱是接受不到sendmail发送的邮件的,网易邮箱可以
系统中可能默认没有安装cron服务,需要手动安装,debian和centos的软件包不一样,一个是cron一个是crontabs
shell脚本中定义变量时,单引号”和反引号“是不一样的,如果要定义可执行程序的变量一定要用反引号