mysql 学习笔记(2)
mysql 主从复制
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。
MySQL 默认采用异步复制
方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
MySQL 主从复制的主要用途
- 读写分离
- 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换(主从切换)
- 高可用(HA)
- 架构扩展
MySQL 主从复制的原理
MySQL 主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:
主节点 log dump 线程
当从节点连接主节点时,主节点会为其创建一个 log dump 线程,用于发送和读取 bin-log 的内容。在读取 bin-log 中的操作时,log dump 线程会对主节点上的 bin-log 加锁,当读取完成,在发送给从节点之前,锁会被释放。主节点会为自己的每一个从节点创建一个log dump 线程
。从节点 I/O 线程
当从节点上执行start slave
命令之后,从节点会创建一个 I/O 线程用来连接主节点,请求主库中更新的 bin-log。I/O 线程接收到主节点的 blog dump 进程发来的更新之后,保存在本地relay-log(中继日志)
中。从节点 SQL 线程
SQL 线程负责读取 relay-log 中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
对于每一个主从连接,都需要这三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个log dump 进程
,而每个从节点都有自己的I/O进程,SQL进程
。从节点用两个线程将从主库拉取更新和执行分成独立的任务,这样在执行同步数据任务的时候,不会降低读操作的性能。比如,如果从节点没有运行,此时 I/O 进程可以很快从主节点获取更新,尽管 SQL 进程还没有执行。如果在 SQL 进程执行之前从节点服务停止,至少 I/O 进程已经从主节点拉取到了最新的变更并且保存在本地 relay 日志中,当服务再次起来之后,就可以完成数据的同步。
要实施复制,首先必须打开Master 端的binary log(bin-log)功能,否则无法实现。