MySQL数据库定时同步
本文最后更新于 2025年10月15日 中午
MySQL 数据库定时同步
一、核心目标
将 源服务器 192.168.1.100 上的所有 MySQL 数据库,通过 mysqldump 导出,并实时导入到 目标服务器 192.168.1.200 中,实现数据同步。
二、前置条件
- 网络连通性:确保目标服务器
192.168.1.200可以通过 SSH 连接到源服务器192.168.1.100。 - 权限:
- 在
192.168.1.100上,拥有可以通过 SSH 登录的用户(user)和密码。 - 在
192.168.1.100上,拥有 MySQL 的root或具有全局读取权限的用户密码(mypassword)。 - 在
192.168.1.200上,拥有 MySQL 的root或具有全局写入权限的用户密码(mypassword)。
- 在
- 工具安装:
192.168.1.100上必须安装mysqldump工具(通常在mysql-client包中)。192.168.1.200上必须安装mysql客户端工具。
三、操作步骤(在目标服务器 192.168.1.200 上执行)
1. 配置 SSH 免密登录(关键,用于自动化)
为了让定时任务(如 cron)能自动执行,需要配置从目标服务器到源服务器的免密 SSH 登录。
1 | |
2. 执行同步命令
在 目标服务器 192.168.1.200 的命令行中,执行以下核心同步命令。
1 | |
四、命令参数详解
| 参数 | 作用 |
|---|---|
ssh user@192.168.1.100 '...' |
通过 SSH 远程登录到源服务器 192.168.1.100,并执行单引号内的命令。 |
/home/db/mysql/product/bin/mysqldump |
mysqldump 命令的绝对路径,确保在任何环境下都能被正确找到。 |
-uroot |
指定 MySQL 的用户名,这里是 root。 |
-pmypassword |
指定 MySQL 的密码。注意:-p 和密码之间没有空格。 |
-P 3306 |
指定 MySQL 的端口号,这里是默认的 3306。 |
--single-transaction |
(核心参数) 对 InnoDB 存储引擎,此参数会创建一个事务快照,实现热备份,备份期间不锁表,对线上业务影响极小。 |
--set-gtid-purged=OFF |
(关键参数) 如果源或目标服务器开启了 GTID(全局事务ID),此参数可以避免因 GTID 集合冲突导致的导入失败。它会阻止 mysqldump 在备份文件中写入 GTID 相关声明。 |
--all-databases |
指定导出源服务器上的所有数据库。 |
| |
管道符。它将左侧 ssh 命令的所有输出(即 .sql 备份文件的内容),作为右侧 mysql 命令的输入。这避免了生成中间文件,非常高效。 |
mysql -uroot -pmypassword -P 3306 |
在本地服务器(即 192.168.1.200)上执行的 mysql 命令,它会读取从管道传来的 SQL 语句并执行,从而完成数据导入。 |
五、重要提示与最佳实践
安全警告:在命令行中明文写密码(
-pmypassword)会被记录在命令历史中,存在安全风险。强烈建议使用~/.my.cnf配置文件来存储数据库密码。- 在源服务器
192.168.1.100的~/.my.cnf中添加:1
2
3
4[mysqldump]
user = root
password = mypassword
port = 3306 - 在目标服务器
192.168.1.200的~/.my.cnf中添加:1
2
3
4[mysql]
user = root
password = mypassword
port = 3306 - 配置后,命令可简化为:
ssh user@192.168.1.100 '/home/db/mysql/product/bin/mysqldump --single-transaction --set-gtid-purged=OFF --all-databases' | mysql
- 在源服务器
自动化:此命令非常适合放入
crontab中,实现每日定时备份或同步。例如,每天凌晨 2 点执行:1
0 2 * * * ssh user@192.168.1.100 '/home/db/mysql/product/bin/mysqldump --single-transaction --set-gtid-purged=OFF --all-databases' | mysql >> /var/log/mysql_sync.log 2>&1日志记录:建议将命令的输出和错误信息重定向到日志文件(如
>> /var/log/mysql_sync.log 2>&1),以便于问题排查。
MySQL数据库定时同步
https://xinhaojin.github.io/2025/10/13/MySQL数据库定时同步/