定时自动备份网站和数据库的脚本

林继 VPS 知识 1,312 共写了519个字 (2014-01-11 23:21:24) 没有评论 打印 扫描二维码 百度已收录

随着时间推移备份文件越来越多,在同一个目录中难以组织管理。1.1版增加按年月创建目录存放备份文件。

1、备份网站

  1. #!/bin/sh
  2. # File:    /home/backup_shell/backup_web.sh
  3. # Author:  lovelucy
  4. # Version: 1.1
  5.  
  6. # Some vars
  7. BIN_DIR="/usr/bin"
  8. BCK_DIR="/backup"
  9. WEB_DIR="/var/www/html"
  10. DATE=`date +%F`
  11. DATE_YEAR=`date +%Y`
  12. DATE_MONTH=`date +%m`
  13.  
  14. # Make Dir
  15. if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  16. then
  17.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
  18. else
  19.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
  20.     mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  21. fi
  22.  
  23. # Backup
  24. tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_$DATE.tar.gz  $WEB_DIR

2、备份数据库

  1. #!/bin/sh
  2. # File:    /home/backup_shell/backup_db.sh
  3. # Author:  lovelucy
  4. # Version: 1.1
  5.  
  6. # Database info
  7. DB_USER="root"
  8. DB_PASS="db_password"
  9. DB_NAME="db_name"
  10.  
  11. # Some vars
  12. BIN_DIR="/usr/bin"
  13. BCK_DIR="/backup"
  14. DATE=`date +%F`
  15. DATE_YEAR=`date +%Y`
  16. DATE_MONTH=`date +%m`
  17.  
  18. # Make Dir
  19. if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  20. then
  21.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
  22. else
  23.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
  24.     mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  25. fi
  26.  
  27. # Backup
  28. $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、备份网站日志

  1. #!/bin/sh
  2. # File:    /home/backup_shell/backup_log.sh
  3. # Author:  lovelucy
  4. # Version: 1.1
  5.  
  6. # Some vars
  7. BIN_DIR="/usr/bin"
  8. BCK_DIR="/backup"
  9. LOG_ERROR="/var/log/web-error_log"
  10. LOG_ACCESS="/var/log/web-access_log"
  11. DATE=`date +%F`
  12. DATE_YEAR=`date +%Y`
  13. DATE_MONTH=`date +%m`
  14.  
  15. # Make Dir
  16. if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  17. then
  18.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
  19. else
  20.     echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
  21.     mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
  22. fi
  23.  
  24. # Backup
  25. tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/log_$DATE.tar.gz  $LOG_ERROR $LOG_ACCESS
  26.  
  27. # Clear logs
  28. echo > $LOG_ERROR
  29. echo > $LOG_ACCESS

4、设置cron定时执行

  1. $ crontab -e

此时会启动默认编辑器vim,添加以下内容

  1. # backup log *daily*
  2. 59 3 * * * /home/backup_shell/backup_log.sh
  3. # backup database *weekly*
  4. 1 4 * * 5 /home/backup_shell/backup_db.sh
  5. # backup web files *monthly*
  6. 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传送备份文件到远程服务器的功能。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >