转载

mysql主从同步机制

1、binlog+pos同步(默认为异步)
从服务器通过IO进程读取主库的binlog,写入到relay_log中,
从服务器通过sql running进程读取从库的relay_log,并写入到从库的bin_Log实现同步
我们生产一般使用row模式,因为有些函数在使用mix和state模式可能会报错。

2、半同步(5.5开始)
半同步就是就是用户向mysql写入数据,先写入到主库,然后生成binlog日志。主库等待从库来取binlog日志,如果从库超过10秒没有来获取binlog日志。主库自动转换为异步,以后用户写入数据生成binlog日志,等待用户自己来取,没有取到主库也不在管理。
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
在没有指明的情况下,默认都是异步复制。

3、GTID同步(5.6.10开始)
使用UUID+事务ID作为全局事物标识,UUID为每台机器的标识符,事务ID记录最新的事务,不在使用binlog+pos开启复制。而是使用master_auto_postion=1的方式自动匹配GTID断点进行复制。

4、group replication(5.7.17开始)
基于传统异步复制和半同步复制的缺陷——数据的一致性问题无法保证,MySQL官方在5.7.17版本正式推出组复制,也就是MGR。
由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交。由3个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发生组间通讯,由2个节点决议(certify)通过这个事务,事务才能够最终得以提交并响应。




半同步的开启方法和前提条件:
要想使用半同步复制,必须满足以下几个条件:
1. MySQL 5.5及以上版本
2. 变量have_dynamic_loading为YES
3. 异步复制已经存在

1、首先加载插件,主从分别安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2、查看插件是否安装成功。
1、show plugins;
rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL 
2、mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
+----------------------+---------------+
1 row in set (0.00 sec)
3、启动半同步复制(也可以写在配置文件中)
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
4、重启从上的IO线程
mysql> STOP SLAVE IO_THREAD;
mysql> START SLAVE IO_THREAD;
5、检查半同步是否正确运行
mysql> show status like 'Rpl_semi_sync_master_status';
mysql> show status like 'Rpl_semi_sync_slave_status';
均显示为ON则正常启动。



正文到此结束
Loading...