Linux下定時自動備份遠端主機mysql資料庫並拷貝到其他主機
環境:
作業系統CentOS6.5、mysql5.1
主資料庫伺服器(A)、備資料庫伺服器(B)、異地備份伺服器(C)
主、備資料庫伺服器的mysql資料庫完全一致,異地備份伺服器用於儲存備份檔案。
實施方案:在主機B建立計劃任務,每天凌晨3:00自動定時備份主機A的資料庫到主機B,備份檔案從主機B拷貝至主機C儲存,再刪除主機B的資料庫備份檔案。
實施步驟:
1)在主機B的目錄 /usr/local/bin 下新建指令碼檔案dbbak.sh,實現功能邏輯:
#!/bin/bash
#這是一個簡單的mysql資料庫邏輯備份指令碼
#1.定義資料庫連線、目標庫資訊
MY_USER="這裡是主機A的mysql資料庫的使用者
MY_PASS=" 這裡是主機A的mysql資料庫的密碼 "
MY_HOST="192.168.1.X" #這裡是主機A的IP
MY_CONN="-u $MY_USER -p$MY_PASS -h $MY_HOST"
MY_DB1="這裡是主機A的mysql資料庫的庫名"
#2.定義備份目錄、工具、時間、檔名主體
BF_DIR="/data/BAK/"
BF_CMD="/usr/bin/mysqldump"
BF_TIME=`date +%Y%m%d`
NAME_1="$MY_DB1-$BF_TIME"
#3.先匯出為.sql指令碼,然後再進行壓縮(打包後刪除原檔案)
cd $BF_DIR/
$BF_CMD $MY_CONN $MY_DB1 --default-character-set=utf8 --opt -Q -R --skip-lock-tables | gzip > $BF_DIR$NAME_1.sql.gz
scp $BF_DIR$NAME_1.sql.gz
rm -rf $BF_DIR$NAME_1.sql.gz
建立好以上指令碼內容後,用命令chmod 修改一下.sh許可權即可:
如chmod u+x *.sh賦予.sh許可權
2)實現主機B和主機C之間用SCP命令免密碼傳輸資料。
在主機B執行:
#ssh-keygen -t rsa
結果如下
QUOTE:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):
Enter passphrase (empty for no passphrase):#回車
Enter same passphrase again:#回車
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c [email protected]
Generating RSA keys:
Key generation complete.
會在使用者目錄~/.ssh/產生兩個檔案,id_rsa,id_rsa.pub
將id_rsa.pub檔案拷貝到主機C的root使用者主目錄下的.ssh目錄下,並且改名為authorized_keys(即:cd ~/.ssh)
這樣主機B上使用scp命令複製檔案到主機C上將不提示輸入密碼了,直接自動複製了。也可在主機B上使用scp命令將主機C上檔案複製到本機;總之不需要驗證,就可以在主機B訪問主機C。
注:如果有多臺計算機需要與主機C進行復制,則只需將id_rsa.pub中的內容複製到主機C的authorized_keys檔案中即可。(經在ssh上驗證不可以,主機C只可以與一臺伺服器不需要驗證)。
3)在主機B建立計劃任務
# crontab -e
30 2 * * * /root/bin/dbbak.sh #此處代表凌晨2:30執行dbbak.sh指令碼
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
# chkconfig crond on
# service crond status
crond (pid 3263) 正在執行...
#修改計劃任務後需重啟服務:service crond restart
自此整個方案實施完畢,經筆者測試,功能正常。
特別注意:
當主機的SSH遠端埠修改後,本文涉及的SCP免密碼傳輸的機制將失效,解決辦法如下:
1.SCP指令要加上埠號:scp -P 55822 $BF_DIR$NAME_1.sql.gz [email protected]:/data/BAK/DB/FullBackup/ #這裡的IP是主機C的IP
2.重新執行本文的2)步驟,重建SCP免密碼傳輸機制。