龙空技术网

MySQL 主备

瓜哇园 104

前言:

现在你们对“mysqlip库”大体比较注意,你们都想要分析一些“mysqlip库”的相关内容。那么小编也在网摘上汇集了一些对于“mysqlip库””的相关资讯,希望咱们能喜欢,你们一起来学习一下吧!

主备基本原理

主备切换流程

状态 1 中,客户端的读写都直接访问节点 A,节点 B 是 A 的备库,将 A 的更新同步过来到本地执行。这样节点 B 和 A 的数据是相同的。当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的备库。主备详细流程

MySQL 5.6之前主备流程

主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写 binlog。备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。流程如下

1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。

2. 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。

3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。

4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。

5. sql_thread 读取中转日志,解析出日志里的命令,并执行。

MySQL 5.6之后主备流程

老版本中只有一个线程的 sql_thread,现在拆成多个线程,coordinator 就是原来的 sql_thread, 不过现在它不再直接更新数据了,只负责读取中转日志和分发事务。真正更新日志的,变成了 worker 线程。

结语

MySQL所有的高可用架构,都直接依赖于 binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。

引用说明: 林晓斌-《MySQL 45讲》

标签: #mysqlip库 #mysql一主一从一备 #mysql备与从