mysql双主怎么切换 mysql两主一从( 三 )


(3)SQL slave thread处理该过程的最后一步:SQL线程从中继日志读取事务,并重放其中的事务而更新slave的数据,使其与master中的数据一致 。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中 , 所以中继日志的开销很小 。
主主同步就是两台机器互为主的关系,在任何一台机器上写入都会同步至备端 。
为了便于后续数据库服务器的扩展,且在整个复制环境中能够自动地切换 , 降低运维成本,引入了当前主流的基于Mysql GTID的复制特性 , 工作原理及优缺点简介如下 。
3、 GTID工作原理简介:
(1) master更新数据时 , 会在事务前产生GTID,一同记录到Binlog日志中 。
(2) slave的I/O线程将变更的binlog写入到本地的relay log中 。
(3) slave的sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录 。
(4) 如果有记录说明该GTID的事务已经执行,slave会忽略 。
(5) 如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog 。
(6) 在解析的过程中会判断是否有主键 , 如果有就用索引,如果没有就用全部扫描 。
4、 GTID优点:
(1) 一个事务对应一个唯一的ID,一个GTID在一个服务器上 只会执行一次 。(2) GTID是用来替代传统复制的方法 , GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置 。
(3) 减少手工干预和降低服务故障时间,当主机宕机之后会通过软件从众多的备机中提升一台备机为新的master 。
5、 GTID也存在一些限制:
(1) 不支持非事务引擎 。
(2) 不支持create table … select 语句复制(主库直接报错) 。
(3) 不允许一个sql同时更新一个事务引擎表和非事务引擎表 。
(4) 在一个复制组中,必须要求统一开启GTID或者是统一关闭GTID 。
(5) 开启GTID需要重启(5.7版本除外) 。
(6) 开启GTID后,就不再使用原理的传统复制方式 。
(7) 不支持create temporary table 和 drop temporary table语句 。
(8) 不支持sql_slave_skip_counter 。
前置条件:
主备两个节点使用行内统一的安装部署脚本安装mysql5.7.21介质(略)
Master1端创建应用的数据库(略)
1、 修改MySQL配置文件
参考相关配置规范,分别设置master1、master2的my.cnf文件 , 
其中server-id参数设置为不同值;
由于后续keepalived会挂起VIP,应用通过VIP连接数据库,为了避免应用程序无法通过VIP访问,需将两个节点的bind-address参数注释掉;
2、 设置master1端自动半同步模式
Mysql的同步模式主要有如下3种:
a. 主从同步复制:数据完整性好,但是性能消耗略高;
b. 主从异步复制:性能消耗低,但容易出现不一致;
c. 主从半自动复制:介于上述两种之间,既保持了数据的完整性,又提高了性能;
基于上述特性,建议采用半自动同步模式,由于后续要配置为双主模式,因此任一节点其角色既为master又为slave,因此相关的master/slave插件要同时配置,过程如下 。
(1) 首先查看库是否支持动态加载(默认都支持)
(2) 主从库上分别安装插件
作为主库 , 安装插件semisync_master.so
作为从库,安装插件semisync_slave.so
(3) 安装完成后,从plugin表中能够看到刚刚安装的插件
(4) 分别打开主从库半同步复制
同时添加到各自的my.cnf中,在后续数据库实例重启时自动加载该配置 。
此时查看状态还没有启动

推荐阅读