標籤:
最近客戶有個需求,小弟對於營運的東西也是半瓶醋,所以就果斷的摸索了下。折磨了一個晚上終於算是搞定了。因為是兩個不同的伺服器,本來想用ftp,無奈小弟不是很熟悉,所以就用了scp,但是scp有個問題就是要輸入密碼才能複製,這下把小弟急壞了,那我這shell指令碼咋辦,
我的需求是我要每天定時匯出三個表,然後通過scp複製到另外一台伺服器上,再恢複這三個表的資料。
俗話說,家事找度娘,小弟就翻閱了度娘的衣櫃,終於算是找到了件合身的衣服。
該文章連結是這個http://blog.csdn.net/xifeijian/article/details/19998129,
為了避免連結不能用了,我就鬥膽copy了,
在遠程拷貝的時候,需要配置scp的 無密碼 複製檔案和目錄。在編寫Shell指令碼的時候非常有用,你不希望shell指令碼在執行過程中因為要檢驗密碼被打斷而報許可權錯誤吧。
整個過程如下:
本機伺服器:A
遠程伺服器:B
1.在 A 上運行 ssh-keygen -t rsa 在/home/openpf/.ssh下產生id_rsa 和 id_rsa.pub 兩個檔案,然後在/home/openpf/.ssh下複本備份一份id_rsa.pub 命名為 id_rsa.pub.A,以便拷貝到伺服器B,:
2. 在 B 上也同樣運行 ssh-keygen -t rsa
3. 在 B 的/home/openpf/.ssh下建立authorized_keys檔案,把A 中 id_rsa.pub.A 檔案傳到 B伺服器/home/openpf/.ssh 下,
通過 cat 命令 把id_rsa.pub.A 追寫到 authorized_keys 檔案中,命令如下:
scp ./id_rsa.pub.A B的IP:/home/openpf/.ssh
cat id_rsa.pub.A >> authorized_keys
4.配置完畢
測試:
scp ./id_rsa.pub.A 10.16.133.200:/home/openpf/.ssh 無需輸入密碼執行成功
命令:
複製檔案:
1.將本地檔案拷貝到遠程
scp 檔案名稱 使用者名稱@電腦IP:遠程路徑
2.從遠程將檔案拷回本地
scp 使用者名稱@電腦IP:檔案名稱 本地路徑
複製目錄:
1.將本地目錄拷貝到遠程
scp -r 目錄名 使用者名稱@電腦IP:遠程路徑
2.從遠程將目錄拷回本地
scp -r 使用者名稱@電腦IP:目錄名本地路徑
以上的目錄可以自己建
我的是在/root/.ssh
這樣第一步scp就完成了。貼下我的shell指令碼代碼,小弟獻醜了
#!/bin/bash
HOSTNAME="xxxx" #資料庫ip
PORT="3306" #連接埠
USERNAME="root" #使用者名稱
PASSWORD="xxxxx" #密碼
DBNAME="rcbc" #資料庫名稱
TABLECUSUSER="cus_user" #資料庫中表的名稱
TABLECUSRANK="cus_rank" #資料庫中表的名稱
TABLECUSUSERBODY="cus_user_body"
backUpDir=/root/backup/mysql/question/ #儲存路徑
#3.設定檔案備份檔案名稱
filecususer=cus_user
filecususerbody=cus_user_body
filecusrank=cus_rank
dumpfilecususer=$backUpDir$filecususer`date -d now +%Y%m%d`.sql
dumpfilecususerbody=$backUpDir$filecususerbody`date -d now +%Y%m%d`.sql
dumpfilecusrank=$backUpDir$filecusrank`date -d now +%Y%m%d`.sql
#備份資料表
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSUSER > $dumpfilecususer
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSUSERBODY > $dumpfilecususerbody
/usr/bin/mysqldump -u$USERNAME -P$PORT -p$PASSWORD -h$HOSTNAME $DBNAME $TABLECUSRANK > $dumpfilecusrank
#刪除昨天的資料
rm -f $backUpDir$filecususer`date -d -1day +%Y%m%d`.sql
rm -f $backUpDir$filecususerbody`date -d -1day +%Y%m%d`.sql
rm -f $backUpDir$filecusrank`date -d -1day +%Y%m%d`.sql
我是先備份然後再刪除昨天備份的sql指令碼
然後就是恢複資料了
指令碼如下
#!/bin/bash
HOSTNAME=xxxx" #資料庫資訊
PORT="3306"
USERNAME="root"
PASSWORD="xxxx"
DBNAME="rcbc" #資料庫名稱
TABLECUSUSER="cus_user" #cus_user表
TABLECUSRANK=‘cus_rank‘ #cus_rank表
TABLECUSBODY=‘cus_user_body‘ #cus_user_body
#刪除資料
delete_user_sql="delete from ${TABLECUSUSER}"
delete_rank_sql="delete from ${TABLECUSRANK}"
delete_body_sql="delete from ${TABLECUSBODY}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_user_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_rank_sql}"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete_body_sql}"
DATE=`date +%Y%m%d`
#複製資料
scp -r [email protected]遠程伺服器ip:/root/backup/mysql/question /root/backup/mysql/scp
#執行恢複命令
/usr/bin/mysql -uroot [email protected] rcbc <<EOF
source /root/backup/mysql/scp/question/cus_user${DATE}.sql;
source /root/backup/mysql/scp/question/cus_rank${DATE}.sql;
source /root/backup/mysql/scp/question/cus_user_body${DATE}.sql;
EOF
exit;
以上就是小弟的全部內容了,獻醜了。望指正
linux 通過scp 複本備份恢複mysql資料表