- 首页 >
- 问答 >
-
云计算 >
- Ubuntu MariaDB主从同步原理
Ubuntu MariaDB主从同步原理
小樊
33
2025-11-26 23:07:31
核心流程与线程模型
- 主库将数据的变更以事件形式写入二进制日志 Binary Log(binlog)。
- 从库启动一个I/O 线程连接主库,持续读取主库的 binlog 并写入本地的中继日志 Relay Log。
- 从库再启动一个SQL 线程读取 Relay Log,按顺序在从库上重放这些事件,从而保持与主库的数据一致。
- 线程关系:每个主从连接有主库的Binlog Dump 线程;每个从库有自身的I/O 线程与SQL 线程。这是 MariaDB/MySQL 复制的基础模型。
复制格式与数据一致性
- 复制格式由参数 binlog_format 控制,常用取值为:
- STATEMENT:记录 SQL 语句本身;
- ROW:记录行级变更;
- MIXED:由服务器按场景自动选择。
- 复制是异步的:主库提交事务后不等待从库确认,从库会存在一定延迟(可通过 Seconds_Behind_Master 观察)。
- 复制并非复制磁盘数据文件,而是基于binlog 事件流进行传输与重放。
关键配置与复制起点
- 主库必备:
- 设置唯一的 server-id;
- 启用 log-bin(开启 binlog);
- 创建用于复制的账号并授予 REPLICATION SLAVE 权限;
- 通过 SHOW MASTER STATUS 获取当前的 File 与 Position,作为从库复制起点。
- 从库必备:
- 设置唯一的 server-id(与主库及其他从库不同);
- 配置 relay_log;
- 使用 CHANGE MASTER TO 指定主库连接信息与复制起点(MASTER_LOG_FILE、MASTER_LOG_POS);
- 启动复制后,用 SHOW SLAVE STATUS\G 检查 Slave_IO_Running 与 Slave_SQL_Running 是否为 Yes。
常见拓扑与注意事项
- 常见拓扑:一主一从、一主多从、链式级联;也可做双主,但需额外处理自增与冲突。
- 重要注意:
- 主从库 server-id 必须唯一;
- 建议主从时间同步(如 NTP);
- 放通 3306 端口与网络连通性;
- 从库可设置 read_only=1 避免业务误写(SUPER 权限账户仍可写);
- 误执行 DROP/DELETE 等语句会复制到从库,需配合备份/延迟从库/闪回等策略降低风险。