条件:服务器A、服务器B
一、定时备份服务器A的数据库
1.新建目录存放.sh文件
cd mnt mkdir db_backup cd db_backup vim backup.sh #修改文件权限为可执行 chmod +x backup.sh
2.备份服务器A的数据库并传输到服务器B
#备份路径 BACKUP=/mnt/db_backup #当前时间 DATETIME=$(date +%Y-%m-%d) #数据库地址 HOST=xxx #数据库用户名 DB_USER=xxx #数据库密码 DB_PW=xxx #数据库名 DATABASE=xxx #备份到服务器A mysqldump -u${DB_USER} -p${DB_PW} ${DATABASE} > ${BACKUP}/$DATABASE-$DATETIME.sql cd $BACKUP #传输到服务器B sshpass -p B的密码 scp $DATABASE-$DATETIME.sql root@B的ip:/mnt/db_backup/ #删除3天前备份的数据,可以自行更改 find $BACKUP -mtime +3 -name "*.sql" -exec rm -rf {} \;
3.创建定时任务
#编辑crontab文件 vim /etc/crontab 添加以下内容(每天6点01分执行.sh文件) 01 6 * * * root /mnt/db_backup/backup.sh #重启cron服务 service cron restart
二、定时将sql文件导入服务器B的数据库
1.新建目录存放.sh文件(同上)
2.将A传过来的sql文件导入到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.创建定时任务(同上,时间可选择晚于服务器A定时时间10分钟)
三、问题与解决
1.跨服务器传输sshpass报错:
Host key verification failed
因为首次通过sshpass用A链接B,A中没有相关的密码记录,所以要先在A中执行一次:
sshpass 测试文件 root@B的ip:/mnt/db_backup/
根据提示键入密码,使A有了B的相关记录,即可解决此问题
2.建议对.sh文件制定定时任务前都先手动执行一遍,测试能否成功,执行命令:
bash xxx.sh
作者:寒冰助手
链接:https://www.jianshu.com/p/e84d0b89fda9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。