條件:服務(wù)器A、服務(wù)器B
一、定時(shí)備份服務(wù)器A的數(shù)據(jù)庫(kù)
1.新建目錄存放.sh文件
cd mnt
mkdir db_backup
cd db_backup
vim backup.sh
#修改文件權(quán)限為可執(zhí)行
chmod +x backup.sh
2.備份服務(wù)器A的數(shù)據(jù)庫(kù)并傳輸?shù)椒?wù)器B
#備份路徑
BACKUP=/mnt/db_backup
#當(dāng)前時(shí)間
DATETIME=$(date +%Y-%m-%d)
#數(shù)據(jù)庫(kù)地址
HOST=xxx
#數(shù)據(jù)庫(kù)用戶名
DB_USER=xxx
#數(shù)據(jù)庫(kù)密碼
DB_PW=xxx
#數(shù)據(jù)庫(kù)名
DATABASE=xxx
#備份到服務(wù)器A
mysqldump -u${DB_USER} -p${DB_PW} ${DATABASE} > ${BACKUP}/$DATABASE-$DATETIME.sql
cd $BACKUP
#傳輸?shù)椒?wù)器B
sshpass -p B的密碼 scp $DATABASE-$DATETIME.sql root@B的ip:/mnt/db_backup/
#刪除3天前備份的數(shù)據(jù),可以自行更改
find $BACKUP -mtime +3 -name "*.sql" -exec rm -rf {} \;
3.創(chuàng)建定時(shí)任務(wù)
#編輯crontab文件
vim /etc/crontab
添加以下內(nèi)容(每天6點(diǎn)01分執(zhí)行.sh文件)
01 6 * * * root /mnt/db_backup/backup.sh
#重啟cron服務(wù)
service cron restart
二、定時(shí)將sql文件導(dǎo)入服務(wù)器B的數(shù)據(jù)庫(kù)
1.新建目錄存放.sh文件(同上)
2.將A傳過(guò)來(lái)的sql文件導(dǎo)入到B
DATABASE=xxx
DATETIME=$(date +%Y-%m-%d)
#操作mysql
mysql -u user -ppasswd <<EOF
drop database $DATABASE;
create database $DATABASE;
use $DATABASE;
source /mnt/db_backup/$DATABASE-$DATETIME.sql;
EOF
3.創(chuàng)建定時(shí)任務(wù)(同上,時(shí)間可選擇晚于服務(wù)器A定時(shí)時(shí)間10分鐘)
三、問(wèn)題與解決
1.跨服務(wù)器傳輸sshpass報(bào)錯(cuò):
Host key verification failed
因?yàn)槭状瓮ㄟ^(guò)sshpass用A鏈接B,A中沒(méi)有相關(guān)的密碼記錄,所以要先在A中執(zhí)行一次:
sshpass 測(cè)試文件 root@B的ip:/mnt/db_backup/
根據(jù)提示鍵入密碼,使A有了B的相關(guān)記錄,即可解決此問(wèn)題
2.建議對(duì).sh文件制定定時(shí)任務(wù)前都先手動(dòng)執(zhí)行一遍,測(cè)試能否成功,執(zhí)行命令:
bash xxx.sh