1. 程式人生 > >Linux下定時自動備份遠端主機mysql資料庫並拷貝到其他主機

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
[email protected]
:/data/BAK/DB/FullBackup/      #這裡的IP是主機C的IP
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免密碼傳輸機制。