Linux MariaDB复制原理是什么
导读:MariaDB 复制原理概述 MariaDB 复制基于主库将变更写入二进制日志(Binary Log,binlog),从库通过 I/O 线程获取这些变更并写入中继日志(Relay Log),再由 SQL 线程回放,从而实现数据在从库重放与一...
MariaDB 复制原理概述 MariaDB 复制基于主库将变更写入二进制日志(Binary Log,binlog),从库通过 I/O 线程获取这些变更并写入中继日志(Relay Log),再由 SQL 线程回放,从而实现数据在从库重放与一致性。复制可基于位置(file/position)或基于事务标识(GTID)进行定位;常见复制模式包括异步、半同步与(MariaDB 10.0+)多源复制,用于读写分离、备份与高可用等场景。
工作流程
- 主库写入变更到binlog(语句或行级事件)。
- 从库启动后创建I/O 线程连接主库,主库为该连接启动binlog dump 线程持续推送变更;从库 I/O 线程把收到的事件写入本地relay log,并更新连接元数据(如 master.info)。
- 从库的SQL 线程顺序读取 relay log 并在本地执行,从而让从库数据与主库保持一致。
- 从库可选择性将重放的事件写入自身的 binlog(开启 log_slave_updates),以便级联复制或进一步分发。
复制模式与一致性
- 复制格式
- 基于语句(SBR):记录 SQL 语句;日志体积小,但依赖上下文(如时间、用户函数、触发器)时可能不一致。
- 基于行(RBR):记录行级变更;更精确、适用范围广,但日志体积可能更大。
- 混合(MBR):默认 SBR,遇到不精确场景自动切换为 RBR。
- 一致性保证
- 异步复制:主库提交即返回,不等待从库;性能高但存在延迟与数据不一致风险。
- 半同步复制:主库提交至少等待一个从库收到并记录事件后返回;在超时未达成时可退化为异步,兼顾性能与可用性。
- 多源复制(Multi‑Source):一个从库可从多个主库拉取并合并变更(MariaDB 10.0+),用于汇聚与分发场景。
关键配置与文件
- 必要配置
- 主库:启用log-bin,设置唯一server-id;创建用于复制的账号并授予REPLICATION SLAVE权限。
- 从库:设置唯一server-id,配置relay-log;按需开启read_only(对 SUPER 权限用户无效,可配合 FLUSH TABLES WITH READ LOCK 做一致性快照)。
- 复制定位
- 基于位置:记录并传递 binlog 的文件名与位置(File/Position)。
- 基于 GTID:每个事务具备全局唯一GTID,从库告知已执行 GTID 集合,主库仅发送未执行事务,保证一次且仅一次执行语义。
- 重要文件
- mysql-bin.index / mysql-relay-bin.index:二进制/中继日志索引。
- master.info / relay-log.info:保存主库连接信息与复制位点,勿手动删除。
常见拓扑与应用
- 一主多从:最常用架构,用于读扩展与备份;从库可进一步级联。
- 主主互备:两台服务器互为主从,写高可用但需处理自增冲突与复制过滤。
- 双主多从:在主主基础上挂多个从库,兼顾写可用与读扩展。
- 环形/星型复制:基于主主/级联的扩展形态,配置复杂、冲突风险高,需谨慎使用。
- 典型用途:读写分离、数据分布与异地灾备、备份窗口缩短、升级与测试等。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux MariaDB复制原理是什么
本文地址: https://pptw.com/jishu/759713.html
