条件:服务器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