将MySQL数据库定时备份到另一台服务器

364 阅读1分钟

Step 1 导出数据

当MySQL运行在Docker中时

docker exec -it mysql mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql

没有运行在Docker中时,只需要执行后半部分常规的mysqldump即可。

Step 2 将数据scp到另一台服务器

这里用S指代source服务器,D指代destination服务器。

首先,获取S的公钥

ssh-keygen -t rsa

然后将S的公钥复制到D的/root/.ssh/authorized_keys文件中,之后就可以免密进行scp

scp /home/数据库名.sql root@DIP地址:/home/数据库名.sql

Step 3 将以上两步编写为sh脚本

#!/bin/bash
# Name:XXX
# 备份XXX数据库
docker exec mysql mysqldump -uroot -p密码 数据库名 > /home/数据库名.sql 2>/home/error.log
scp /home/数据库名.sql root@D的IP地址:/home/数据库名.sql

注意这里docker命令行不能加 -it 参数,可以加 2> 导出可能出现的错误信息。

Step 4 添加crontab定时任务

注意crontab语法,参考这篇文章

查看日志是否有报错,可能会报属组属主,rwx权限等错误。一般将属组属主都改为root,rwx改为644即可。可以将cron表达式先改成每分钟,检查效果,之后再改回实际时间。