目录
一、MySQL主从复制
1、概述
在实际的生产环境中,成熟的业务通常数据量都比较大,数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。
2、mysql支持的复制类型
(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql在5.7版本之前默认采用基于语句的复制,特点是执行效率高,在高并发情况下可能会无法精确复制。
(2)ROW:基于行的复制。在5.7版本之后默认使用基于行的复制,把改变的内容复制过去,而不是把命令在从服务器上执行一遍。特点是非常精确,保存的数据量可能会变大,效率变慢。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现在高并发情况下基于语句无法精确复制时,就会采用基于行的复制。
3、MySQL主从复制的工作过程
①首先需要主服务器开启二进制日志,备服务器开启中继日志
②主服务器的数据更新时,会将其改变写入二进制日志中
③如果主服务器的二进制日志发生改变,备服务器会开启io线程向主服务器请求二进制日志事件/记录
④主服务器为每个io线程开启一个dump线程,用于向从服务器发送二进制事件
⑤从服务器保存二进制日志到中继日志中,并开启SQL线程读取中继日志中的二进制事件并解析成sql语句进行重放/逐一执行,使得数据和主服务器保持一致
注:
中继日志通常会位于 OS 缓存中,所以中继日志的开销很小
复制过程有一个很重要的限制,即复制在 Slave上是串行化的,也就是说 Master上的并行更新操作不能在 Slave上并行操作
4、主从复制实际操作
主服务器:
①关闭防护墙和安全机制
②设置时间同步
使用主服务器做边缘服务器