本地MySQL服务器与Azure Database for MySQL如何实现数据库持续同步
本地MySQL到Azure Database for MySQL持续同步实现方案
该需求完全可实现,你此前配置未生效通常是入站复制的前置校验、参数配置或权限环节存在遗漏,以下是两种可落地的实现方案:
方案一:Azure MySQL原生入站复制(无额外成本,优先推荐)
这是Azure官方提供的原生同步能力,适配绝大多数场景,正确配置步骤如下:
前置校验 90%的配置失败都出在该环节
- 版本匹配:本地MySQL大版本需与Azure MySQL一致或向下兼容,比如本地5.7可同步到Azure 5.7/8.0,本地8.0仅可同步到Azure 8.0
- 本地MySQL binlog配置:必须开启二进制日志且必须使用行格式,修改本地MySQL配置文件(my.cnf/my.ini)后重启服务生效:
[mysqld] log-bin=mysql-bin binlog-format=ROW server-id=1 # 不可与Azure MySQL的默认server-id重复,Azure默认server-id通常大于1000000 - 本地复制账号权限:在本地MySQL创建专用同步账号并授予对应权限:
CREATE USER 'repl_user'@'%' IDENTIFIED BY '自定义强密码'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; - 导出数据参数校验:你此前使用mysqldump导出时必须添加
--master-data=2参数,才能在导出文件中拿到正确的binlog文件名和偏移量,标准导出命令参考:mysqldump --single-transaction --master-data=2 -u 本地用户名 -p 待同步的数据库名 > 备份文件.sql
同步配置步骤
- 确认你已经将mysqldump导出的数据完整恢复到Azure Database for MySQL实例中
- 在Azure MySQL的服务器配置页,将本地MySQL的公网IP加入防火墙白名单,放通3306端口访问权限
- 登录Azure MySQL执行存储过程,配置同步源信息,替换对应参数为你自己的实际值:
CALL mysql.az_replication_change_master('本地MySQL公网IP/域名', 'repl_user', '同步账号密码', 3306, 'mysqldump备份文件中记录的binlog文件名', 对应的binlog偏移量, ''); - 启动同步任务:
CALL mysql.az_replication_start; - 验证同步状态,执行命令后确认
Slave_IO_Running和Slave_SQL_Running两项都为Yes即配置成功:SHOW SLAVE STATUS\G
方案二:第三方同步工具(适合复杂同步场景)
如果原生入站复制无法满足你的需求(比如需要多库同步、自定义数据过滤、跨网络复杂环境同步等),可使用开源工具实现:
pt-table-sync:适合小数据量场景,可定期校验两端数据差异并自动同步,运维成本低Canal:阿里开源的binlog订阅工具,配置灵活,支持自定义同步规则,可适配各类复杂网络环境Debezium+JDBC Sink Connector:适合大数据量低延迟场景,可实现毫秒级增量数据同步
内容的提问来源于stack exchange,提问作者shubhi jain
相关产品推荐
相关产品推荐

