檔案備份的重要性不言而喻,定期備份是個好習慣,不管是網站檔案還是日常生活的照片、影片等。不然等到資料遺失了,你就能體會資料找不回來的那種絕望了。筆者親身經歷過幾次,最嚴重的一次是個人部落格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 {} \;
最後,還是希望大家能養成備份的習慣。除了伺服器上的每日備份,另外還是建議一個星期,從伺服器上拷貝一份資料到本地磁碟,保證資料萬無一失。
以上是shell程式實戰之網站檔案及資料庫檔案的備份的詳細內容。更多資訊請關注PHP中文網其他相關文章!