当前位置: 首页 > news >正文

3、主从复制实现同步数据过滤

在 MySQL 8 主从复制中,指定数据库同步有两种方案:主库过滤(binlog-do-db)从库过滤(replicate-do-db / replicate-wild-*)推荐在从库配置,更灵活、更安全。

一、核心参数说明

1. 主库(Master)过滤(不推荐)

在主库my.cnf/my.ini[mysqld]下配置:

# 只将以下库的变更写入 binlog binlog-do-db = db1 binlog-do-db = db2 # 不写入 binlog(黑名单) binlog-ignore-db = mysql binlog-ignore-db = test
  • 缺点
    • 一旦设置,所有从库都只能同步这几个库,不灵活
    • 依赖USE 数据库上下文,跨库语句容易漏同步
    • 主库 binlog 不完整,无法用于全量恢复

2. 从库(Replica)过滤(推荐)

在从库my.cnf[mysqld]下配置:

# 白名单:只同步这些库 replicate-do-db = db1 replicate-do-db = db2 # 黑名单:不同步这些库 replicate-ignore-db = mysql replicate-ignore-db = test # 通配符(推荐):同步 db_ 开头的所有库 replicate-wild-do-table = db\_%.* # 忽略 log_ 开头的所有表 replicate-wild-ignore-table = %.log\_%
  • 优点
    • 每个从库可独立控制同步范围
    • replicate-wild-*支持通配符,不受USE影响
    • 主库保留完整 binlog,可恢复

⚠️ 注意:

  • replicate-do-dbROW 模式下按表所属库判断,较可靠
  • MySQL 8.0.26+ 已弃用部分库级过滤,优先用表级通配符

二、完整配置步骤(推荐:从库过滤 + GTID)

1. 主库配置(my.cnf)

[mysqld] server-id = 1 # 必须唯一 log-bin = mysql-bin # 开启 binlog binlog-format = ROW # 强烈推荐 ROW 模式 gtid_mode = ON enforce_gtid_consistency = ON sync_binlog = 1 binlog_expire_logs_seconds = 864000 # 日志自动清理

重启主库

systemctl restart mysqld

2. 主库创建复制账号

CREATE USER 'repl'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'Repl@123'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%'; FLUSH PRIVILEGES;

3. 从库配置(my.cnf)

[mysqld] server-id = 2 # 必须不同 read_only = 1 super_read_only = 1 relay-log = relay-bin gtid_mode = ON enforce_gtid_consistency = ON # ========== 关键:指定同步库 ========== # 方案A:精确库名 # replicate-do-db = order_db # replicate-do-db = user_db # 方案B:通配符(推荐) replicate-wild-do-table = order\_%.* # 同步 order_ 开头的所有库 replicate-wild-do-table = user\_%.* replicate-wild-ignore-table = %.%_log # 忽略所有以 _log 结尾的表

重启从库

systemctl restart mysqld

4. 从库建立主从关系(GTID 模式)

STOP REPLICA; CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.100', SOURCE_USER='repl', SOURCE_PASSWORD='Repl@123', SOURCE_AUTO_POSITION=1; -- GTID 自动定位 START REPLICA;

5. 验证

SHOW REPLICA STATUS\G
  • 查看Slave_IO_RunningSlave_SQL_Running均为Yes
  • 查看Replicate_Do_DBReplicate_Wild_Do_Table是否已加载

三、动态修改过滤规则(无需重启)

MySQL 8 支持在线修改:

STOP REPLICA; -- 只同步 db1、db2 CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2), REPLICATE_WILD_IGNORE_TABLE = (db1.%_log); START REPLICA;

查看规则:

SHOW VARIABLES LIKE '%replicate%';

四、常见坑与最佳实践

  1. 不要混用主库 + 从库过滤
    1. 主库binlog-do-db+ 从库replicate-do-db容易出现“双重过滤”导致数据丢失
  2. 跨库语句问题
    1. USE db1; INSERT INTO db2.tbl VALUES(...);
    2. 库级过滤replicate-do-db):只看当前库db1,可能误判
    3. 表级通配符replicate-wild-do-table=db2.*):稳定生效
  3. 推荐组合
    1. binlog_format = ROW replicate-wild-do-table = 目标库.* replicate-wild-ignore-table = %.日志表

五、总结

  • 主库过滤:简单但不灵活,不推荐
  • 从库库级过滤replicate-do-db,简单场景可用
  • 从库通配符(首选)replicate-wild-do-table稳定、灵活、不受跨库影响
http://www.jsqmd.com/news/615324/

相关文章:

  • 基于电气距离与区域调节能力的分布式最优潮流控制技术
  • Agent能和企业现有 SaaS 工具打通吗?深度拆解2026年企业级智能体集成路径与实战指南
  • 将盾CDN:代码审计与安全测试的方法论
  • 面试题设计模式
  • 、SEATA分布式事务——XA模式泳
  • 无后门无恶意代码,精选安全可靠的企业级源码,经过严格测试,保障系统稳定运行
  • 超流体真空理论:光速本质、微观粒子结构与量子纠缠拓扑机制
  • 将盾CDN:身份与访问管理的最佳实践
  • 2026年哈尔滨婚纱摄影靠谱机构最新推荐:法式婚纱照、新中式婚纱照、生日写真、森系婚纱照、草坪婚纱照、韩式婚纱照、、哈尔滨禧禾婚纱摄影工作室,以匠心定格爱情,用镜头留存美好 - 海棠依旧大
  • 《零基础入门Spark》学习笔记 Day 13
  • 高效光伏电池建模技术分享:Boost Buck电路实现最大功率追踪
  • Java 线程、进程、CPU缓存、MESI
  • Untrunc视频修复工具:让损坏的MP4文件重获新生
  • 微软常用运行库 安装教程:一键修复VC++运行环境(AIO合集)
  • 将盾CDN:业务安全与反欺诈的实战策略
  • 用 AI Coding 工具生成 万字奇幻世界设定的实践记录滥
  • TrailBase 与 PocketBase 详细对比
  • 将盾CDN:移动应用安全合规的实践指南
  • ESP32/8266利用闪存文件系统创建 Web服务实现交互控制
  • GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路赂
  • IOFILE结构体的介绍与House of orange轮
  • 深度解析DHCP协议:工作原理、4步交互流程及应用场景
  • std::time
  • mysql如何在本地开发环境模拟生产环境_利用Docker克隆
  • 20个核心AI概念拆解:小白也能轻松入门大模型,收藏这份学习秘籍!
  • vue el-table 切换页面、组件销毁会内存泄漏吗?99% 的人都误解了
  • claude (二) skill
  • AI Agent Harness Engineering 如何改变咨询行业并重新定价知识
  • 详细解析Spring如何解决循环依赖问题事
  • 将盾CDN:云原生环境的安全防护策略