每一個可以努力的日子,都是一份厚禮。
定時自動備份網站和數據庫的腳本
公司租用了一台萬網雲主機,這是一台虛擬專用服務器,擁有獨立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 也可以發表評論或引用到你的網站。除特殊說明外文章均為本人原創,並遵從署名-非商業性使用-相同方式共享創作協議,轉載或使用請註明作者和來源,尊重知識分享。 |
批評不自由
則讚美無意義
:razz:感謝 很有用!