假设服务器A是一台数据库服务器,服务器B是一台备份服务器,我们需要在A服务器上编写数据备份与文件推送到服务器B的脚步
back.sh
备份保存目录
folder=/home/mysql-back-up
rm -rf /home/mysql-back-up
mkdir $folder
cd $folder
day=`date +%Y-%m-%d`
mkdir -p "$day"
cd $day
#数据库服务器ip,填写服务器的公网地址即可
host=serverIP
#用户名
user=userName
#密码 自己写
password=myPassword
#要备份的数据库名
#db=dbName
db=dbName
#执行备份语句
/usr/local/mysql/bin/mysqldump -h$host -u$user -p$password $db > ./backFileName.sql
#推送文件到备份服务器
/usr/local/scp.exp /home/mysql-back-up/ 服务器用户@服务器地址:/home/
通过expect脚本实现运行scp指令后自动输入密码
需要安装expect ,yum install expect
scp.exp
#!/usr/bin/expect
#FileName:scp.exp
set timeout 60
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd myPassword
set passwderror 0
spawn scp -r -p $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
把myPassword改成服务器B的密码即可
1、脚本需要加上权限 chmod -R 777 back.sh
2、创建定时任务
a)、crontab -e
b)、0 1 * * * sh /usr/local/back.sh #每天凌晨一点执行
c)、/bin/systemctl restart crond.service 重启cron