MySQL備份 MySQL 定期自動備份到遠端機器
MySQL備份 大家都知道可以使用mysqldump,但是應該沒有人會記得天天自己上去機器備份吧
因此要做到自動備份就要仰賴作業系統,無論是windows排程還是Linux corntab
接著除了自動備份以外,如果備份檔案還是存在於同一台機器上,那麼當機器無法連線時再多的備份都無用
因此今天還要再加入自動備份到遠端機器上
接下來的動作會用到幾項東西
- mysqldump : 備份用應該沒有疑慮
- crontab : Linux排程器
- ssh遠端免密碼設定:要讓script直接ssh將檔案送至遠端所以無法設定密碼驗證,需要透過金鑰
如果你還沒有看過架站文章請先參考
參考文件 :
https://blog.lupopi.com/2012/10/mysql-sq.html
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產生金鑰組
1 |
ssh-keygen -t rsa |
指令二 :將金鑰組設定到NAS的信任清單中
1 |
cat ~/.ssh/id_rsa.pub | ssh nas-user@nas-host "cat >> ~/.ssh/authorized_keys" |
指令三 :因為金鑰可編輯有點危險,因此必須設定唯讀權限
1 |
ssh nas-user@nas-host "chmod 400 ~/.ssh/authorized_keys" |
步驟二 :撰寫shell script檔案
接著必須寫一個sh檔,讓crontab定期去執行它
1 2 3 4 5 |
#!/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 |
要注意的地方有幾個
- 我是用時間去組合備份檔名,這部分可以自由設計
- USER : 代表登入mysql的帳號
- PASSWORD : 代表登入mysql的密碼,-P與PASSWORD之間並沒有空白
- –routines : 代表著需要連stored procedure都匯出
- 後面的意思就是將備份檔案壓縮起來之後透過SSH送到遠端,接著利用cat將檔案放到你要的位置上
最後存檔為mysql.sh
步驟三 :必須要讓mysql.sh具有執行權限
透過指令修改mysql.sh的權限
1 |
chmod +x mysql.sh |
步驟四:設定crontab
透過crontab -e 打開檔案編輯,本次範例加入一行
1 |
0 2 * * * bash PATH_TO_SH/mysql.sh |
讓系統在每天的2點去執行 bash PATH_TO_SH/mysql.sh
當然你也可以手動執行sh檔,就會在預計要儲存備份檔的機器看到.gz壓縮檔了