文件備份的重要性不言而喻,定期備份是個好習慣,不管是網站文件還是日常生活的照片、視頻等。不然等到數據丟失了,你就能體會數據找不回來的那種絕望了。筆者親身經歷過幾次,最嚴重的一次是個人博客7個多月的數據全部丟失,那真是種欲哭無淚的感覺。
今天和大家來講下如何在服務器端編寫備份網站目錄及數據庫文件的腳本。首先需要先補充幾個知識:
-
tar命令,文件的壓縮打包
-
find命令,查找文件
-
bzip2,文件壓縮
為了節省空間,我們經常會對目錄文件做壓縮并打包的操作。bzip2命令可以對文件進行壓縮,但它不能對目錄進行壓縮,對目錄則可以使用tar命令壓縮打包。
因為數據庫文件就是一個單獨的sql文件,所以可以使用bzip2命令對其壓縮。
mysqldump?-u用戶名?-p密碼?--all-databases?|?bzip2?>?備份目錄/文件名
而網站文件則需要使用tar命令來進行壓縮。
tar?-jcpf?備份目錄/文件名??需備份的目錄
雖然我們每天都會進行備份,但是我們只想保存最近七天的備份記錄,7天前的備份數據自動刪除。這里我們就需要使用find命令來找出7天前的備份文件,然后將其刪除。
find?備份目錄?-mtime?+7?-type?f?-exec?rm?-f?{}?;
下面開始正式編寫shell腳本。首先,我們需要定義備份目錄,如果備份目錄不存在,則需要先創建目錄。
WWW_DIR=/home/wwwroot BAK_DIR=/root/bak if?[?!?-d?$BAK_DIR?];then ????mkdir?$BAK_DIR fi
接下來 ,就是進行網站目錄以及數據庫文件的備份了
tar?-jcpf?$BAK_DIR/www_$(date?+%Y%m%d).tar.bz2?$WWW_DIR?2>/dev/null mysqldump?-uroot?-p123456?--all-databases?|?bzip2?>?$BAK_DIR/all_database_$(date?+%Y%m%d).sql
最后,只要刪除七天前的備份數據即可
find?$BAK_DIR?-type?f?-mtime?+7?-exec?rm?-f?{}?;
下面貼出完整代碼:
#!/bin/bash #?備份數據庫文件及網站文件 WWW_DIR=/home/wwwroot BAK_DIR=/root/bak if?[?!?-d?$BAK_DIR?];then ????mkdir?$BAK_DIR fi #?備份網站文件及數據庫文件 tar?-jcpf?$BAK_DIR/www_$(date?+%Y%m%d).tar.bz2?$WWW_DIR?2>/dev/null mysqldump?-uroot?-pGuiyuan#520@1314?--all-databases?|?bzip2?>?$BAK_DIR/all_database_$(date?+%Y%m%d).sql? #?刪除7天前的備份數據 find?$BAK_DIR?-type?f?-mtime?+7?-exec?rm?-f?{}?;
最后,還是希望大家能養成備份的習慣。除了服務器上的每日備份,另外還是建議一個星期,從服務器上拷貝一份數據到本地磁盤,保證數據萬無一失。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END