站点图标 Linux-技术共享

Vmshell验证版:MySQL定时主备数据库备份

条件:服务器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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

退出移动版