linux下A伺服器檔案自動備份到B伺服器(SCP+EXPECT+CROTAB)
大綱:
1.備份原理
2.expect安裝和說明
3.具體程式碼
4.crontab定時執行指令碼
1.備份原理
本人小白,複雜的shell不會寫,所以只能利用幾種簡單的程式碼加上一定的邏輯,來實現伺服器的檔案備份。
A伺服器對資料夾和資料庫進行備份
A伺服器通過scp命令進行傳送備份
B伺服器每天清理一次備份(為了節約空間)
B伺服器每月1日進行備份的儲存(在刪除之前複製一份出來)
2.expect安裝和說明
expect時用與提供自動互動的工具。比如如果想要用ssh登陸伺服器,每次都輸入密碼你覺得麻煩,那你就可以使用expect來做自動互動,這樣的話就不用每次都輸入密碼了。
本文利用expect來進行scp執行時的密碼輸入(使用金鑰進行傳輸無需密碼,也就無需expect,本文暫不涉及金鑰)
yum install expect -y #安裝expect
#以下是expect的用法:
spawn 命令 #這個命令是你在linux命令列要執行的命令
expect "*password:" send "123\r" #如果彈出*password,則自動輸入123\r
expect eof #結束expect匹配
3.具體程式碼
少廢話,上程式碼:
A伺服器:vim cpaliyun.sh (網站和資料庫備份)
#!/bin/bash
mysqldump -uroot -p資料庫密碼@ wordpress | gzip > /backup/aliyun/sql_pmhuiyilu_$(date +%Y%m%d_%H%M%S).sql.gz
zip -r /backup/aliyun/web_pmhuiyilu_$(date +%Y%m%d_%H%M%S).zip /web/pmhuiyilu/
workdir="/backup/aliyun/"
do_delete()
{
find $workdir -name '*.sql.gz' -and -mtime +1 -type f -delete
if [ $? -eq 0 ];then
echo $date delete $dir success!
else
echo $date delete $dir FAILD!
fi
find $workdir -name '*.zip' -and -mtime +1 -type f -delete
if [ $? -eq 0 ];then
echo $date delete $dir success!
else
echo $date delete $dir FAILD!
fi
}
do_delete
A伺服器:vim scp.sh (利用scp進行資料夾的傳送,第一次執行可能要輸入yes/no,本指令碼並未做處理,可手動執行一遍手動輸入yes)
#!/usr/bin/env expect
/usr/bin/expect <<-EOF
set time 300
spawn scp -r /backup/aliyun/ root@B伺服器IP:/home/pmhuiyilutoday
expect {
"root@B伺服器IP's password:" { send "B伺服器root密碼\r" }
}
set timeout 5000
expect eof
EOF
B伺服器:copy.sh
cp -rf /home/pmhuiyilutoday/* /home/pmhuiyilutomonth
B伺服器:remove.sh
rm -rf /home/pmhuiyilutoday/*
4.crontab定時執行指令碼
crontab -e #開啟crontab定時器(關於crontab之前有文章寫過,可參考)
A伺服器每天4點執行cpaliyun.sh指令碼進行打包,每天4點10分執行scp.sh指令碼進行傳送
B伺服器每個月1號6點執行copy指令碼將備份複製一份出來,每天3點50對接受傳送的資料夾進行清理

A伺服器crontab

B伺服器crontab
完