Azure MySQL回滚同步至AWS MySQL方案及增量数据查询请求
从Azure MySQL同步增量数据回AWS MySQL的回滚方案
一、回滚同步操作步骤
1. 暂停Azure侧业务写入
- 立即暂停所有指向Azure MySQL的业务写入操作,比如关停相关应用实例、设置临时流量拦截规则,避免增量数据持续产生导致同步遗漏。
2. 确认回滚基准时间点
- 明确需要同步的起始时间(比如故障发现时间、迁移完成后的指定时间点),这个时间点要与之前AWS到Azure同步的最终完成时间对齐,避免重复同步历史数据。
3. 导出Azure MySQL增量数据
- 使用
mysqldump工具过滤导出指定时间后的新增/修改数据,支持多Schema、多表批量导出:
注意事项:mysqldump -h <azure-mysql-host> -u <username> -p --databases schema1 schema2 \ --tables table1 table2 --where="updated_at >= 'YYYY-MM-DD HH:MM:SS'" --no-create-info > incremental_data.sql- 若存在迁移后Azure侧新增的表,需单独导出表结构:
mysqldump -h <azure-host> -u <user> -p --databases schema1 --tables new_table --no-data > new_table_schema.sql,先导入结构再导数据。 --no-create-info参数跳过表结构导出,因为AWS侧已有一致的表结构。
- 若存在迁移后Azure侧新增的表,需单独导出表结构:
4. 验证增量数据文件
- 打开导出的SQL文件,检查数据行数、时间范围是否符合预期,排查是否包含错误SQL语句。
5. 导入增量数据至AWS MySQL
- 使用
mysql命令将增量数据导入AWS,处理主键冲突时按需选择策略:
可选优化:mysql -h <aws-mysql-host> -u <username> -p < incremental_data.sql- 临时禁用外键约束避免导入失败:
SET FOREIGN_KEY_CHECKS=0; -- 执行导入 SET FOREIGN_KEY_CHECKS=1; - 若存在主键重复,可将SQL中的
INSERT替换为REPLACE INTO(覆盖旧数据)或INSERT IGNORE(跳过重复),需根据业务场景选择。
- 临时禁用外键约束避免导入失败:
6. 校验数据一致性
- 对比Azure与AWS侧指定表的关键指标:
-- 对比行数 SELECT COUNT(*) FROM schema1.table_name; -- 对比最新数据 SELECT * FROM schema1.table_name ORDER BY updated_at DESC LIMIT 10;
7. 恢复AWS侧业务流量
- 确认数据完全一致后,切换业务流量回AWS MySQL,恢复正常业务运行。
二、查询指定时间后增量数据的SQL语句
1. 单表增量查询(基于更新/创建时间)
假设表包含created_at(创建时间)和updated_at(更新时间)字段,查询指定时间后新增或修改的数据:
SELECT * FROM `schema_name`.`table_name` WHERE created_at >= 'YYYY-MM-DD HH:MM:SS' OR updated_at >= 'YYYY-MM-DD HH:MM:SS';
2. 批量生成多Schema多表查询语句
自动生成指定Schema和表的增量查询脚本:
SELECT CONCAT( 'SELECT * FROM `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` ', 'WHERE created_at >= ''YYYY-MM-DD HH:MM:SS'' OR updated_at >= ''YYYY-MM-DD HH:MM:SS'';' ) AS incremental_query FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA IN ('schema1', 'schema2') AND TABLE_NAME IN ('table1', 'table2');
3. 无时间字段时的增量查询(依赖Binlog)
若表未维护时间字段,需通过Azure MySQL的Binlog提取增量:
- 确认Binlog开启:
SHOW VARIABLES LIKE 'log_bin'; - 查看可用Binlog文件:
SHOW BINARY LOGS; - 解析指定时间范围的Binlog:
解析后需手动过滤出目标Schema和表的操作语句,再导入AWS。mysqlbinlog --start-datetime="YYYY-MM-DD HH:MM:SS" --stop-datetime="YYYY-MM-DD HH:MM:SS" \ -h <azure-mysql-host> -u <username> -p --read-from-remote-server <binlog-filename> > binlog_incremental.sql
内容的提问来源于stack exchange,提问作者VIGNESH A KUNDER
相关产品推荐
相关产品推荐

