資料備份與安全一直是我們必須要去關注的問題,之前我們也曾經因為主機掛掉導致資料流失,在這邊來教幾個有效備份資料庫的方法。
在這邊我們以 Ubuntu 作業系統為例:
1. MySQLDUMP & Corntab
從 MySQL 匯出有幾個簡單的方式,例如透過〝phpMyAdmin〞或 〝Adminer〞來輸出,不過這兩個也有缺點,一旦資料庫檔案太大,就不容易進行匯入,另一方面,也偶爾會有匯入發生錯誤的情形發生。
所以在這邊,我們建議使用使用 mysqldump 來進行資料庫的匯出。
首先,我們可以一個簡單的指令 mysqldump 來匯出 SQL 檔。
指令規則如下:
1 |
sudo mysqldump -u帳號 -p密碼 資料表名稱 > 路徑與檔名 |
我們假設要輸出 guestbook 這個資料表為例,而我們的資料庫密碼為〝123456〞,而備份的時間是 2019/09/20 08:20。
1 |
sudo mysqldump -uroot -p123456 guestbook > ~/backup_sql/guestbook_`date +\%Y\%m\%d_\%H\%M`.sql |
以上例,我們會輸出 SQL 檔到 ~/backup_sql/guestbook_20190920_0820.sql 。
註:我們可以透過 date +\%Y\%m\%d_\%H\%M
來用變數產生動態檔名。
2. Corntab – 加入排程自動備份
當我們成功匯出 SQL 檔之後,我們應該會設想希望自動進行匯出 SQL 檔來進行備份,所以我們來繼續說說如何透過 Ctontab 的排程設定來完成備份。
首先,我們先進入排程設定:
1 |
sudo crontab -e |
進到排程之後,我們把上述的指令,加入到我們的排程當中。 ( 以每日 00:00 分進行備份為例 )
1 2 |
# 分鐘,小時,日期,月份,星期,command 0 0 * * * mysqldump -uroot -p123456 guestbook > ~/backup_sql/guestbook_`date +\%Y\%m\%d_\%H\%M`.sql |
這樣一來,我們就完成了每日備份。
3. 資料庫還原
當我們每日都有資料庫備份的時候,一旦遇到資料損毀或是需要回溯追查資料的時候,我們就需要進行資料還原,還原的方式也非常的簡單,指令如下所示:
1 |
sudo mysql -u root -p 資料表名稱 < 路徑與檔名 |
一樣我們透過範例來實作,我們將上述輸出的 ~/backup_sql/guestbook_20190920_0820.sql 還原到我們的資料表檔中。
輸入完成指令之後,系統會需要你輸入〝資料庫密碼〞,輸入正確之後,將就會完成還原的動作。
1 |
sudo mysql -u root -p guestbook < ~/backup_mysql/guestbook_20190920_0820.sql |
透過這一行指令,就能完成我們的資料庫還原。
延伸:
我們之後再來說說:
- 備份策略 ( 避免無限資料寵大塞爆主機空間 )
- 當你每日備份之後,有可能會造成資料備份檔龐大,所以應該要用用怎樣的策略來進行留存策略。
- 異地備份:
- 當你有另外一台主機,能不能直接備份到「另一台主機」,來確保程式的執行主機不會被塞爆而影響到營運主機的運行。