网站出现意外,如服务器损坏,黑客攻击等,要想在最短的时间内恢复正常,最好的方法是使用备份的数据来恢复。
下面介绍在Linux系统下如何通过脚本 + 计划任务来完成服务器数据自动备份。
这个 shell script 的功能是把网站打包成 zip 传送到 ftp 的同时、给 zip 压缩包加上密码
用法很简单,将这个 shell script 加入到 cronjobs,例如我需要每日 3 点备份可以这样做:
crontab -e
在编辑状态下,加入如下行:
0 3 * * * /root/backup.sh 2>&1 | tee -a /root/backup.log
然后新建 /root 目录下的 backup.sh,完善如下内容后、把内容写入到 backup.sh:
#!/bin/bash MYSQL_USER=数据库账户 MYSQL_PASS=数据库密码 FTP_USER=备份空间的 FTP 账户 FTP_PASS=备份空间的 FTP 密码 FTP_IP=备份空间的 FTP 主机 FTP_backup=备份在 FTP 的哪个目录 WEB_DATA=需要备份的目录 ZIP_PASS=压缩包密码 #定义数据库的名字和旧数据库的名字 DataBakName=Data_$(date +"%Y%m%d").zip WebBakName=Web_$(date +%Y%m%d).zip OldData=Data_$(date -d -7day +"%Y%m%d").zip OldWeb=Web_$(date -d -7day +"%Y%m%d").zip #删除本地3天前的数据 rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").zip /home/backup/Web_$(date -d -3day +"%Y%m%d").zip cd /home/backup #导出数据库,一个数据库一个压缩文件 for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do (/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz) done #压缩数据库文件为一个文件 zip -q -r -P $ZIP_PASS /home/backup/$DataBakName /home/backup/*.sql.gz rm -rf /home/backup/*.sql.gz #压缩网站数据 zip -q -r -P $ZIP_PASS /home/backup/$WebBakName $WEB_DATA #上传到FTP空间,删除FTP空间7天前的数据 ftp -v -n $FTP_IP << END user $FTP_USER $FTP_PASS type binary cd $FTP_backup delete $OldData delete $OldWeb put $DataBakName put $WebBakName bye END
信息部分填写例子如下:
MYSQL_USER=root MYSQL_PASS=123465 FTP_USER=ftp FTP_PASS=123456 FTP_IP=192.168.1.1 FTP_backup=/backup WEB_DATA=/home/wwwroot ZIP_PASS=123456
保存完记得给 backup.sh 加上权限(chmod +x /root/backup.sh)