1、 什么是GTID模式?
1、全局唯一,一个事务对应一个GTID
2、替代传统的binlog+pos复制;使用master_auto_position=1自动匹配GTID断点进行复制
3、MySQL5.6开始支持
4、在传统的主从复制中,slave端不用开启binlog;但是在GTID主从复制中,必须开启binlog
5、slave端在接受master的binlog时,会校验GTID值,则slave需要存储硬盘比之前更大!
6、为了保证主从数据的一致性,多线程同时执行一个GTID
Master_UUID:序列号举例:ceb0ca3d-8366-11e8-ad2b-000c298b7c9a:1-5ceb0ca3d-8366-11e8-ad2b-000c298b7c9a其实就是master的uuid值;1-5是序列号,每次一个事务完成都会自增1,也就是说下一次为1-6。
2、 工作原理
1、master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2、slave端的i/o 线程将变更的binlog,写入到本地的relay log中。
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
4、如果有记录,说明该GTID的事务已经执行,slave会忽略。
5、如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描
3、 配置方法
第一步:确认主从2个MySQL都打开binlog,并且把之前的主从配置都清空
show variables like ‘log_bin’;
第二步:2个MYSQL vim /etc/my.cnf
增加
gtid-mode=ON
enforce-gtid-consistency=ON
重启服务
第三步:
主从数据人工处理保持一致
主库:SHOW MASTER STATU获取取binlog文件名跟位置
从库
CHANGE MASTER TO
MASTER_HOST=‘192.168.31.82’,
MASTER_USER=‘nasen’,
MASTER_PASSWORD=‘pass’,
MASTER_LOG_FILE=‘binlog.000006’,
MASTER_LOG_POS=856;
start slave;
4、 测试验证
随时查看从库数据是否一致!
数据一致代表验证成功!
笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!