前言
在企业实际应用中,成熟的业务通常数据量都比较大,而单台MySQL服务器在安全性、高可用性和高并发方面都无法满足实际的需求,我们可以在多台MySQL服务器(Master-Slave)部署 主从复制来实现同步数据,再通过 读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。
一、相关概述
主从复制:主数据库(Master)发送更新事件到从数据库(Slave),从数据库读取更新记录,并执行更新记录,使得从数据库的内容与主数据库保持一致。
(一)MySQL 支持的复制类型
- 基于语句的复制(STATEMENT)。在主库上执行的 SQL 语句,在从库上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。
- 基于行的复制(ROW)。把改变的内容复制过去,而不是把命令在从库上执行一遍。
- 混合类型的复制(MIXED)。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
(二)MySQL主从复制的工作过程
1.Master 服务器保存记录到二进制日志
- MySQL主库上进行的增、删、改的数据更新,都会按顺序写入到自己的二进制日志(Binary log)当中
2.Slave 服务器复制Master 服务器的日志
- 然后MySQL从库开始一个I/O线程连接主库,读取主库的二进制日志,备份到从服务器的==中继日志(Relay log)==当中。如果已经跟上主库,它会睡眠并等待Master 产生新的事件,I/O线程将这些事件写入中继日志
3.Slave 服务器重放复制过来的日志
- 然后从库打开SQL线程,SQL线程读取I/O线程写入的中继日志,并且根据中继日志的内容更新从库的数据,使其与主库中的数据一致
重点:复制过程有一个很重要的限制,即复制在 Slave 上是串行化的,也就是说Master 上的并行更新操作不能在 Slave 上并行操作
二、读写分离
(1)读写分离的概念
读写分离:读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
(2)读写分离的作用
- 因为数据库的”写”(写10000条本文来源gaodai.ma#com搞#代!码网_
数据可能要3分钟)操作是比较耗时的。但是数据库的”读”(读10000条数据可能只要5秒钟)。
- 所以读写分离,解决的是,数据库的写入,影响了查询的效率。注意:数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能
(3)MySQL 读写分离原理
- 读写分离就是只在主服务器上写,只在从服务器上读
- 基本的原理是让主数据库处理事务性查询,而从数据库处理 select 查询
- 数据库复制被用来把主数据库上事务性查询导致的变更同步到集群中的从数据库
(4)常见的 MySQL 读写分离
1)基于程序代码内部实现
1.在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。