↓ 快轉到主要內容
MySQL備份 MySQL 定期自動備份到遠端機器
技術文章架站

MySQL備份 MySQL 定期自動備份到遠端機器

Posted by Alvin Chen on

MySQL備份 MySQL 定期自動備份到遠端機器

·944 字·2 分鐘
作者
Alvin Chen
相信寫 Code 可以改變世界

MySQL備份 大家都知道可以使用mysqldump,但是應該沒有人會記得天天自己上去機器備份吧

因此要做到自動備份就要仰賴作業系統,無論是windows排程還是Linux corntab

接著除了自動備份以外,如果備份檔案還是存在於同一台機器上,那麼當機器無法連線時再多的備份都無用

因此今天還要再加入自動備份到遠端機器上

接下來的動作會用到幾項東西

  1. mysqldump : 備份用應該沒有疑慮
  2. crontab : Linux排程器
  3. ssh遠端免密碼設定:要讓script直接ssh將檔案送至遠端所以無法設定密碼驗證,需要透過金鑰

如果你還沒有看過架站文章請先參考

ubuntu基礎架站

參考文件 :

https://gwokae.mewggle.com/wordpress/2010/08/%E8%B6%85%E6%98%93-%E5%85%A9%E8%A1%8C%E6%8C%87%E4%BB%A4%E6%90%9E%E5%AE%9A-linux-ssh%E7%99%BB%E5%85%A5%E5%85%8D%E5%AF%86%E7%A2%BC/

https://blog.lupopi.com/2012/10/mysql-sq.html

https://code.kpman.cc/2015/02/11/%E5%88%A9%E7%94%A8-crontab-%E4%BE%86%E5%81%9A-Linux-%E5%9B%BA%E5%AE%9A%E6%8E%92%E7%A8%8B/

https://stackoverflow.com/questions/19664893/linux-shell-script-for-database-backup

情境說明:

本次要做的範例是將一台Softlayer虛擬伺服器上的MySQL在每天凌晨2點時自動備份到我房間的NSA主機上,至於NAS如何開啟SSH在這邊就不多做說明,每個品牌不同可以自行google搜尋

步驟一 :先設定遠端SSH免密碼
#

為什麼要做這個步驟?首先因為要透過shell scrip直接用SSH將檔案送到遠端伺服器,因此必須要將金要先設定好讓Softlayer主機可以直接發送SSH到NAS上,所以我們要設定Softlayer的金鑰送到NAS上儲存

指令一 :Softlayer產生金鑰組

ssh-keygen -t rsa

指令二 :將金鑰組設定到NAS的信任清單中

cat ~/.ssh/id_rsa.pub | ssh nas-user@nas-host "cat >> ~/.ssh/authorized_keys"

指令三 :因為金鑰可編輯有點危險,因此必須設定唯讀權限

ssh nas-user@nas-host "chmod 400 ~/.ssh/authorized_keys"

步驟二 :撰寫shell script檔案
#

接著必須寫一個sh檔,讓crontab定期去執行它

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
FILENAME="filename_$now.sql.gz"
mysqldump -u USER -pPASSWORD --routines DBNAME | gzip -c | ssh nas-user@nas-host 'cat > /PATH_TO_STORE/'$FILENAME
exit 0

要注意的地方有幾個

  1. 我是用時間去組合備份檔名,這部分可以自由設計
  2. USER : 代表登入mysql的帳號
  3. PASSWORD : 代表登入mysql的密碼,-P與PASSWORD之間並沒有空白
  4. –routines : 代表著需要連stored procedure都匯出
  5. 後面的意思就是將備份檔案壓縮起來之後透過SSH送到遠端,接著利用cat將檔案放到你要的位置上

最後存檔為mysql.sh

步驟三 :必須要讓mysql.sh具有執行權限
#

透過指令修改mysql.sh的權限

chmod +x mysql.sh

步驟四:設定crontab
#

透過crontab -e 打開檔案編輯,本次範例加入一行

0 2 * * * bash PATH_TO_SH/mysql.sh

讓系統在每天的2點去執行 bash PATH_TO_SH/mysql.sh

當然你也可以手動執行sh檔,就會在預計要儲存備份檔的機器看到.gz壓縮檔了