一、为什么要有主从复制(读写分离)
通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低。
为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载。
而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失。
随着业务的增长,一台数据库服务器以满足不了需求了,负载过重,这时候就需要减压,实现负载均衡读写分离,一主一从或一主多从
主服务器只管写,从服务器管读,从而提高效率减轻压力。
主从复制分类:
主从同步:当用户写数据主服务器必须和从服务器同步一致了才告诉用户写入成功,等待时间太长
主从异步:只要用户访问写数据主服务器写入立马返回给用户成功
主从半步同步:当用户访问写数据主服务器写入并同步其中一个从服务器就返回给用户成功
备注:通常都是使用的主从异步,根据环境需求来选择,想要数据更安全选择半步同步
二、主从复制的原理
在详细介绍如何设置复制之前,先了解Mysql实际上是如何复制数据的,总的来说,复制有三个步骤:
第一:在主库上把数据更改记录到二进制日志(Binary Log)中,(这些记录被称为二进制日志事件)
第二:备库将主库上的日志复制到自己的中继(Relay Log)中,
第三:备库读取中继日志中的事件,将其重放到备库数据上。
图解:
如图显示了在备库有两个运行的线程,在主库上也有一个运行的线程:和其他普通连接一样,有备库发起的连接,在主库上同样拥有一个线程。
这种复制架构是实现了获取事件和重放事件解藕,允许这两个过程异步进行ÿ