类别:SQL数据库 / 日期:2025-11-19 / 浏览:26 / 评论:0

一、准备条件

两台环境基本一致、拥有 MySQL 的 Linux 服务器(我在下面的描述中会将他们称为服务器 A,服务器 B)

备注:我的服务器使用的 Linux 为 CentOS 7,其他的 Linux 系统操作也基本相似。


二、在服务器 A 中导出数据库数据并传输到服务器 B 中

(一)、在服务器 A 上需要进行的操作

注意:以下命令全部在服务器 A 上进行。

1、在 CentOS7 中安装 rsync

yum -y install rsync

rsync 常用来进行增量备份,也就是说,使用这个命令,已经有的文件是不会再被传输过去,只传输增加的内容。

2、用密钥实现免密登录

由于需要使用命令行传输文件,不方便输入密码,所以在服务器 A 中配置 ssh 免密登录,配置成功后,服务器 A 登录服务器 B 时就不需要输入密码就可以登录了。

(1)生成公钥

在服务器 A 中输入命令:

ssh-keygen

该命令会生成一个公钥,执行命令后,在 ~/.ssh/ 会出现两个新文件:

08b3adc64db3a104df5717c68433b8ba.png

(2)将公钥传输到服务器 B 中

在服务器 A 中输入命令:

ssh-copy-id root@服务器B的IP

从此以后,在服务器 A 中使用 ssh 方式登录服务器 B 就不需要输入密码了。

3、在服务器 A 中书写脚本 backup.sh

这个脚本主要的作用是将要备份的数据导出为一个 SQL 脚本,并将这个脚本传输到服务器 B 的指定目录中:

#!/bin/bash
# 将 woods数据库 导出为一个 SQL 脚本
mysqldump -h服务器A的IP -u用户名 -p密码 woods > /etc/backup/sql/woods`date +%Y%m%d%H%M%S`.sql
# 同步目录(传输新增文件到服务器的B的指定目录)
rsync -arv --delete /etc/backup/sql/ root@服务器B的IP:/etc/backup/sql/

这个脚本做了两个操作:

将 woods数据库 导出为一个 SQL 脚本,这个脚本的命名带上了当前时间。

会将服务器A的 /etc/backup/sql/ 目录与服务器 B 的 /etc/backup/sql/ 目录进行同步。

4、将 backup.sh 加上可执行权限

在服务器 A 中输入命令:

chmod 744 /usr/local/backup.sh

5、测试 backup.sh 是否达到预期的效果

在服务器 A 中输入命令:

sh /usr/local/backup.sh

执行完毕后,查看是否已经生成了备份文件:

8300f6dbab575ee81b79981b088890fa.png

6、添加定时任务

输入命令:

crontab -e

在打开的文件中加入如下内容:

0 1 * * * sh /usr/local/backup.sh

这个意思是每天凌晨 1 点执行脚本。关于 crontab 表达式的更多内容就不在这里说了,感兴趣的可以自己去搜索引擎搜索 crontab 表达式自行学习。


(二)、在服务器 B 上需要进行的操作

注意:以下命令全部在服务器 B 上进行。

1、书写脚本 reduction.sh

这个脚本的作用是执行从服务器 A 中传入过来的 SQL 脚本:

#!/bin/bash
# 找到当天的备份文件的位置并存入到变量 woods_file
woods_file=$(find /etc/backup/sql -name woods`date +%Y%m%d*`)
# 一个 if 判断,意思是如果变量 woods_file 字符串不为空,就执行 then 后面的命令
if [ -n $woods_file ]
then
echo $woods_file
# 执行查找到的 MySQL 脚本
mysql -u用户名 -p密码 数据库名 --default-character-set=utf8 -A -e "source "$woods_file
fi

注意,MySQL 一定已经有你要备份的数据库,mysqldump 导出的 SQL 脚本没有带创建数据库的命令,所以没有就要先自行创建。

2、测试 reduction.sh 是否达到预期效果

sh /usr/local/reduction.sh

执行脚本,查看数据库的内容是否已经变化为备份文件的内容,如果没有发生变化,请根据报错提示,进行排查。

3、设置定时任务

设置定时任务定期执行脚本 reduction.sh

输入命令:

crontab -e

在打开的文件中加入如下内容:

30 1 * * * sh /usr/local/reduction.sh

这个意思是每天凌晨 1 点 30 分执行脚本。


三、总结

完成上面的步骤,就可以让服务器 A 的指定数据库的数据全量定期备份到服务器 B。这里面主要使用了这几个知识点:

rsync:同步工具,可以只同步增加的部分

实现 ssh 免密登录

在 Linux 上,编写简单的 shell 脚本

设置定时任务(crontab)


打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章