一、主从复制概念
1、
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。
无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。
因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
用于实现灾备、读写分离、数据备份。
●实时灾备,用于故障切换
●读写分离,提供查询服务
●备份,避免影响业务
主从复制可以水平扩展数据库的负载能力,容错,高可用,数据备份。
2、
主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。
对于多级复制,数据库服务器既可充当主机,也可充当从机。
主从复制是依赖于二进制日志的,“实时”备份的一个多节点架构。
MySQL 主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。
二、主从复制的类型
1、基于语句的复制:
主服务器上面执行的语句在从服务器上面再执行一遍
存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能不是同一个用户。
2、基于行的复制:
把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的存在的问题:比如一个工资表中有一万个用户,我们把每个用户的工+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了。
3、混合类型的复制:
MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。
三、主从数据库的区别
参考博客:Mysql主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主库从库数据不一致问题的及解决方案
1、
从数据库(Slave)是主数据库的备份,当主数据库(Master)变化时从数据库要更新,这些数据库软件可以设计更新周期。
这是提高信息安全的手段。
主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。
2、
其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行。
而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。
写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作在其他的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。
四、主从部署必要条件
●主库开启binlog日志(设置log-bin参数)
●主从server-id不同
●从库服务器能连通主库
五、MySQL的主从复制
mysql主从复制是对数据库中的数据、语句做备份。
1、
MySQL 主从复制的两种情况:同步复制和异步复制,实际复制架构中大部分为异步复制。
2、复制的基本过程:
Mysql的主从同步就是当master(主库)发生数据变化的时候,会实时同步到slave(从库)。
不管是delete、update、insert,还是创建函数、存储过程,都是在master上,当master有操作的时候,slave会快速的接收到这些操作,从而做同步。
1)Slave 上面的 IO 进程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
2)Master 接收到来自 Slave 的 IO 进程的请求后,负责复制的 IO 进程会根据请求信息读取日志指定位置之后的日志信息,返回给 Slave 的 IO 进程。
返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到 Master 端的 bin-log 文件的名称以及 bin-log 的位置。
3)Slave 的 IO 进程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log 文件的最末端,并将读取到的 Master 端的 bin-log 的文件名和位置记录到 master-info 文件中,以便在下一次读取的时候能够清楚的告诉 Master“我需要从某个 bin-log 的哪个位置开始往后的日志内容,请发给我”。
4)Slave 的 Sql 进程检测到 relay-log 中新增加了内容后,会马上解析 relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。