關於資料庫備份
當一個已在運行的系統(有使用到資料庫),發生了些不可預期的問題。例如:資料損毀…等問題時。為了讓問題的傷害程度降低,我們可以從「如何進行資料庫備份」這件事情來進行思考。
在這篇文章中所使用到的開發環境是:
- 作業系統: Ubuntu
- 資料庫:MySQL
那該如何進行資料庫備份呢?
一般來說有分手動備份及自動備份的方式。至於手動部分就不說明,而自動備份的方式就是寫腳本讓作業系統去幫我們自動備份。
設定自動備份的步驟分為:
- 寫腳本檔案
- 設定comd
- 設定crontab
- 重啟cron
1. 寫腳本檔案
首先,我們先建立sh(Shell scripts)的腳本檔案。
$ vi /home/penguinrun/PenguinRun/backup/mysqldump.sh
筆者在路徑:「/home/penguinrun/PenguinRun/backup/」中建立了mysqldump.sh的腳本檔。之後在該.sh檔裡面輸入:
#backup the sql in user/backup/
mysqldump -uTest -p123 ShoppingCart| gzip > /home/penguinrun/PenguinRun/backup/MySQL/mysqldb_`date +%F`.sql.gz
這段指令的意思是我們要將
- user: Test
- password: 123
- dbName: ShoppingCart
匯出成.sql檔案並壓縮成.gz檔來進行備份。
但這樣會讓系統不斷的備份下去,為了防止這種情況發生,我們還需要增加讓備份的檔案,在經過一段時間後能自動刪除的指令:
#三天前的資料自行刪除
find /home/penguinrun/PenguinRun/backup/MySQL -type f -mtime +3 -exec rm {} +
這段指令是讓路徑:「/home/penguinrun/PenguinRun/backup/MySQL」中的MySQL資料夾,如果裡面有檔案是於現在時間往前推算三天之前的檔案,就一併刪除。
# .sh檔案指令全貌
#backup the sql in user/backup/
mysqldump -uTest -p1234 dbName | gzip > /home/penguinrun/PenguinRun/backup/MySQL/mysqldb_`date +%F`.sql.gz//mysqldb_2017-04-14.sql.gz壓縮檔案#三天前的資料自行刪除
find /home/penguinrun/PenguinRun/backup/MySQL -type f -mtime +3 -exec rm {} +
在建立好.sh腳本檔後,我們先測試看看能不能運行
$ cd <targetFolder> //移動到設定.sh檔案的資料夾
$ ./mysqldump.sh
通常完成後就可以在該目標資料夾底下看到.gz的備份檔案了。
2. 設定comd
修改.sh檔案的權限,讓該檔案可以被系統執行。而這邊所要進行的指令是$chmod +x <.sh path>。其中x的意思是:
- x(execute):讓該檔案具有被系統執行的權限
$ chmod +x /home/penguinrun/PenguinRun/backup/mysqldump.sh
如果想要更深入了解.sh可以參考:
3. 設定crontab
之後修改工程排程資料(crontab),讓系統去幫我們執行這個.sh檔的
$ crontab -e
在進入編輯畫面後,在最下面新增
# Minute Hour Day of Month Month Day of Week Command
# 分 時 日 月 週 指令
# * * * * * command00 15* * * /home/penguinrun/PenguinRun/backup/mysqldump.sh
意思就是要在每天的下午三點執行一次sh檔中的指令,也就是備份資料庫。之後在重新啟動cron就可以了!
4. 重啟cron
$ service cron restart
參考資料: