文章目录
一、主从复制的概念
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
二、主从复制的作用
- 数据的热备:作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
- 架构的扩展:业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
- 读写分离:使数据库能支撑更大的并发。
– (1)在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
– (2)在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全) - 高可用性:数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证服务的正常运行。
三、主从复制的类型
四、主从复制原理
原理:实现整个主从复制,需要由slave服务器上的IO进程和Sql进程共同完成。
过程:
- 打开Master段的bin-log功能
- 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
- 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
- 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。
五、线程的作用
从节点:
I/O Thread:从 Master 节点请求二进制日志事件,并保存于中继日志中。
Sql Thread:从Relay log 中读取日志事件并在本地完成重放。
主节点:
Binlog Dump Thread:为每个 Slave 的 I/O Thread 启动一个 dump 线程,用于向从节点发送二进制事件。
六、主从复制的两种方法
1、MySQL基于日志点的复制
基于主库的bin-log将日志事件和事件位置复制到从库,从库再加以应用来达到主从同步的目的。
2、MySQL基于GTID的复制
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置,因此也就不依赖日志文件,同时又能更好的保证主从库数据一致性。
七、MySQL复制类型
1、异步复制
MySQL默认的复制,主库完成事务时立即将结果返回给客户端,并不关心从库是否接受并处理,因此此类型的响应速度快,但是数据的可靠性低。
2、全同步复制
当主库执行完一个事务,并且所有从库也都执行完该事务时才给客户端返回结果,所以全同步复制的数据可靠性极高。
3、半同步复制
MySQL5.5以后才开始支持的半同步复制,介于上两者之间。主库在执行完一个事务后,等待至少一个从库收到并写入到中继日志中才返回给客户端,所以相对于全同步来说缩短了响应时间。
因为这个延迟的时间至少是一个TCP/IP的往返时间,所以最好在低延迟的网络中使用。