MySQL 是如何保证主备同步?
1 个回答
天道忌满,人道忌全。 水满则溢, 物极必反。慕容雪MySQL 主备同步的保证机制可以分为以下几个阶段: ### 1. 主备关系的建立 - 主备关系的建立由 **备库** 指定。例如,基于位点的主备关系,备库会告诉主库“我要从 binlog 文件 A 的位置 P 开始同步”,此时主库会从指定的位置开始向备库发送数据。 - 一旦主备关系建立之后,**主库** 决定何时将数据发送给备库。主库产生新的 binlog 日志时,会持续将日志发送给备库以保持同步。 ### 2. 主备切换流程 - 在常规情况下,**客户端** 直接访问主库节点 A,节点 B 作为备库进行同步。备库只需要将主库 A 的更新同步到本地并执行,保证数据一致。 - 当需要进行主备切换时,备库 B 可以提升为主库,原主库 A 则变为备库。这时客户端的读写操作会转向新的主库 B。 ### 3. 事务的完整同步过程 - **长连接建立**:备库 B 与主库 A 之间通过长连接进行数据同步,主库 A 内部会专门创建一个线程用于维护这个长连接。 - **配置主库信息**:备库 B 通过 `changemaster` 命令配置主库 A 的 IP、端口、用户名、密码,以及从哪个 binlog 文件名和日志偏移量开始同步。 - **启动同步**:备库 B 执行 `start-slave` 命令,此时备库会启动两个线程: - `io_thread`:负责与主库建立连接,获取 binlog 日志。 - `sql_thread`:负责读取备库上的中转日志并解析执行。 - **日志同步**:备库从主库接收到 binlog 文件后,写入本地生成中转日志(relay log)。 - **多线程复制**:在引入多线程复制方案后,`sql_thread` 演变为多个线程并行执行,提高同步效率。 总结起来,MySQL 主备同步依赖于备库指定初始同步位置,主库不断发送 binlog 文件,备库通过 `io_thread` 和 `sql_thread` 解析和执行日志,保证数据的一致性。发布于 2024-09-12 04:14 •IP属地 黑龙江举报评论收藏1
公众号进入网站体验更佳

