温馨提示×

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 获取当前的 FilePosition,作为从库复制起点。
  • 从库必备:
    • 设置唯一的 server-id(与主库及其他从库不同);
    • 配置 relay_log
    • 使用 CHANGE MASTER TO 指定主库连接信息与复制起点(MASTER_LOG_FILE、MASTER_LOG_POS);
    • 启动复制后,用 SHOW SLAVE STATUS\G 检查 Slave_IO_RunningSlave_SQL_Running 是否为 Yes

常见拓扑与注意事项

  • 常见拓扑:一主一从一主多从链式级联;也可做双主,但需额外处理自增与冲突。
  • 重要注意:
    • 主从库 server-id 必须唯一
    • 建议主从时间同步(如 NTP);
    • 放通 3306 端口与网络连通性;
    • 从库可设置 read_only=1 避免业务误写(SUPER 权限账户仍可写);
    • 误执行 DROP/DELETE 等语句会复制到从库,需配合备份/延迟从库/闪回等策略降低风险。

0