每一个可以努力的日子,都是一份厚礼。
定时自动备份网站和数据库的脚本
公司租用了一台万网云主机,这是一台虚拟专用服务器,拥有独立IP地址以及Linux系统root权限,使用云计算技术以获得更可靠的服务并降低成本。
服务器上运行着旗下2个网站,网站一边运营一边还在迭代开发增加新功能,所以需要定时备份网站和数据库,万一发生故障可以及时恢复。写了几个shell脚本来自动完成这项工作:
更新:随着时间推移备份文件越来越多,在同一个目录中难以组织管理。1.1版增加按年月创建目录存放备份文件。
1、备份网站
#!/bin/sh # File: /home/backup_shell/backup_web.sh # Author: lovelucy # Version: 1.1 # Some vars BIN_DIR="/usr/bin" BCK_DIR="/backup" WEB_DIR="/var/www/html" DATE=`date +%F` DATE_YEAR=`date +%Y` DATE_MONTH=`date +%m` # Make Dir if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH then echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists." else echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..." mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH fi # Backup tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_$DATE.tar.gz $WEB_DIR |
2、备份数据库
#!/bin/sh # File: /home/backup_shell/backup_db.sh # Author: lovelucy # Version: 1.1 # Database info DB_USER="root" DB_PASS="db_password" DB_NAME="db_name" # Some vars BIN_DIR="/usr/bin" BCK_DIR="/backup" DATE=`date +%F` DATE_YEAR=`date +%Y` DATE_MONTH=`date +%m` # Make Dir if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH then echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists." else echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..." mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH fi # Backup $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/$DATE_YEAR/$DATE_MONTH/${DB_NAME}_dump_$DATE.gz |
3、备份网站日志
#!/bin/sh # File: /home/backup_shell/backup_log.sh # Author: lovelucy # Version: 1.1 # Some vars BIN_DIR="/usr/bin" BCK_DIR="/backup" LOG_ERROR="/var/log/web-error_log" LOG_ACCESS="/var/log/web-access_log" DATE=`date +%F` DATE_YEAR=`date +%Y` DATE_MONTH=`date +%m` # Make Dir if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH then echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists." else echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..." mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH fi # Backup tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/log_$DATE.tar.gz $LOG_ERROR $LOG_ACCESS # Clear logs echo > $LOG_ERROR echo > $LOG_ACCESS |
4、设置cron定时执行
$ crontab -e |
此时会启动默认编辑器vim,添加以下内容
# backup log *daily* 59 3 * * * /home/backup_shell/backup_log.sh # backup database *weekly* 1 4 * * 5 /home/backup_shell/backup_db.sh # backup web files *monthly* 5 4 1 * * /home/backup_shell/backup_web.sh |
保存后,默认会在/var/spool/cron目录下生成一个以当前用户名命名的文件。以上内容意义为:每一行由空格分割为6部分,依次为“分钟”、“小时”、“日”、“月”、“星期”、“要执行的程序”。故上面的设置是
- 每天3点59分执行backup_log.sh脚本
- 每个星期5的4点1分执行backup_db.sh脚本
- 每个月1号的4点5分执行backup_web.sh脚本
备份操作可能消耗大量资源和时间,应该设置在凌晨访问量小、系统负载低的时候运行。如果有独立的服务器存储备份文件,还可以在脚本中增加ftp或者email传送备份文件到远程服务器的功能。
更新: 可以将备份文件同步到 Dropbox 中保存,查看操作方法。
这篇文章由lovelucy于2011-07-29 11:53发表在Linux。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。除特殊说明外文章均为本人原创,并遵从署名-非商业性使用-相同方式共享创作协议,转载或使用请注明作者和来源,尊重知识分享。 |
批评不自由
则赞美无意义
Google Chrome 33.0.1750.154 Windows 7 大约10年前
:razz:感谢 很有用!