關於資料庫備份

Justin Lee
4 min readApr 30, 2017

--

當一個已在運行的系統(有使用到資料庫),發生了些不可預期的問題。例如:資料損毀…等問題時。為了讓問題的傷害程度降低,我們可以從「如何進行資料庫備份」這件事情來進行思考。

在這篇文章中所使用到的開發環境是:

  • 作業系統: Ubuntu
  • 資料庫:MySQL

那該如何進行資料庫備份呢?

一般來說有分手動備份自動備份的方式。至於手動部分就不說明,而自動備份的方式就是寫腳本讓作業系統去幫我們自動備份

設定自動備份的步驟分為:

  1. 寫腳本檔案
  2. 設定comd
  3. 設定crontab
  4. 重啟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
# 分 時 日 月 週 指令
# * * * * * command
00 15* * * /home/penguinrun/PenguinRun/backup/mysqldump.sh

意思就是要在每天的下午三點執行一次sh檔中的指令,也就是備份資料庫。之後在重新啟動cron就可以了!

4. 重啟cron

$ service cron restart

參考資料:

--

--