mysql主从同步

http://raye.wang/2017/04/14/mysqlzhu-cong-fu-zhi-da-jian-ji-yu-ri-zhi-binlog/
https://blog.csdn.net/limx59/article/details/52923581
https://www.jb51.net/article/50053.htm

brief

主备方式的mysql使用binlog来做主从同步,在master插入数据后,slave通过binlog把需要修改的数据同步过来,以保证数据一致性。

解决的问题:

高可用:master挂掉后,可以指定一台slave充当master;

负载均衡:可以指定大量的写或者计算到slave;

数据备份:自动的数据备份;

高扩展(硬件扩展):

1、scale-up
向上扩展或者纵向扩展,主要是提供比现在服务器更好性能的服务器,比如增加CPU和内存以及磁盘阵列等,因为有多台服务器,所以可扩展性比单台更大;

2、scale-out
向外扩展或者横向扩展,是指增加服务器数量的扩展,这样主要能分散各个服务器的压力;

主从复制的缺点:成本增加、数据延迟、写入变慢。

mysql主从复制的过程:

MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。
本文只涉及基于日志binlog的主从配置

20161108104440419

复制原理

1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events)
2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)
3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)

根据上述流程图所示,从服务器创建两个进程:

(1)I/O进程:负责读取主服务器的二进制日志文件的数据,并将数据写入到从服务器的中继日志(Relay log)中;

(2)SQL进程:负责读取中继日志中的数据,并且将中继操作返回给从服务器。

在进行Mysql数据复制过程中,为了避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突,所有的表更新都是在主服务器实现的,并且实现的是单向复制。从上述流程图来看,所有的写操作都是单向实现的。

单向复制有利于健壮性、速度和系统管理:

  • 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,可以切换到从服务器做备份;
  • 通过在主服务器和从服务器之间切分处理用户查询的负荷,可以得到更好的用户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应该在主服务器上执行,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询;
  • 使用复制的另一个好处是可以使用一个从服务器之行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。

MySQL提供了数据库的同步功能,这对我们实现数据库的容灾、备份、恢复、负载均衡等都是有极大帮助的。

复制类型

1、基于语句的复制
在Master上执行的SQL语句,在Slave上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制

2、基于行的复制
把改变的内容复制到Slave,而不是把命令在Slave上执行一遍。从MySQL5.0开始支持

3、混合类型的复制
默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制

comments powered by Disqus