GTID
什么是GTID
1、全局唯一,一个事务对应一个GTID
2、替代传统的binlog+pos复制;使用master_auto_position=1自动匹配GTID断点进行复制
3、MySQL5.6开始支持
4、在传统的主从复制中,slave端不用开启binlog;但是在GTID主从复制中,必须开启binlog
5、slave端在接受master的binlog时,会校验GTID值
6、为了保证主从数据的一致性,多线程同时执行一个GTID
组成
Master_UUID:序列号举例:ceb0ca3d-8366-11e8-ad2b-000c298b7c9a:1-5ceb0ca3d-8366-11e8-ad2b-000c298b7c9a其实就是master的uuid值;1-5是序列号,每次一个事务完成都会自增1,也就是说下一次为1-6。
工作原理
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、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描
binlog
binlog 的详细介绍参考:https://www.cnblogs.com/martinzhang/p/3454358.html
主要命令:
show variables liek 'log_%';
# 查看binlog日志列表
show master logs;
# 最新一个binlog的 编号 和 position (正在写入位置)
show master status;
# 重置(清空)所有binlog日志
reset master
# show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
# 查询第一个(最早)的binlog日志
show binlog events
show binlog events in 'mysql-bin.000021'
show binlog events in 'mysql-bin.000021' from 8224
show binlog events in 'mysql-bin.000021' from 8224 limit 10
show binlog events in 'mysql-bin.000021' from 8224 limit 2,10
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013
待整理
https://blog.youkuaiyun.com/qq_34458791/article/details/86616788
5.7 配置文件:http://blog.programster.org/ubuntu-16-04-default-mysql-5-7-configuration
升级mysql:https://www.jianshu.com/p/75c07c0c9779 (升级到5.6.2以上)
重启mysql: https://www.cnblogs.com/anseey/archive/2013/04/28/3049785.html
mysql 版本:https://blog.youkuaiyun.com/lamp_yang_3533/article/details/52266320
let: not found: https://blog.youkuaiyun.com/u011630575/article/details/77197349
sudo service mysql restart
mysql> show slave hosts;