• 欢迎光临~

mysql系列~GTID基础

开发技术 开发技术 2022-08-06 次浏览


一 简介
  1 在主从首次同步时(master_auto_position=1),slave会通过gtid协议将自己已经执行的gtid set(@@global.gtid_executed)发给master,master比较后从首个未被执行的GTID事务开始主从同步
  2 在每个binlog开头会记录已经执行过的gtid集合,这样的好处是解析binlog就能得到对应已执行过的最大集合
  3 全局的执行gtid_executed是唯一的,适用于整个集群
  4 一个集群存在多个主机gtid集合的最有可能情况有两个
     1 是执行过类似MHA的切换 2 从库有数据写入
二 具体参数
   gtid_mode=on
   enforce-gtid-consistency=on #gtid的强约束
   log-slave-updates=1 #5.6需要开启参数,因为gtid_executed是记录在文件中
三 相关表
  1 gtid_purged 被删除的binlog事务集合
  2 gtid_executed 已经执行过的事务集合
四 备份恢复
  1 gtid_executed包含gtid_purged集合,如果想设置gtid_purged,gtid_executed必须设置为空.所以执行备份恢复时必须先清空gtid_executed
  2 清空gtid_executed的办法就是reset master.当执行完reset masterm,set gtid_purged=''之后,gtid_executed的值也会同步,和手动设置gtid_purged的值一样
五 DUMP
  1 dump导出GTID模式下的数据默认会设置语句set global gtid_pured=''; 所以记得dump的时候加上 --set-gtid-purged=off
六 在线转换
  1  mysql 5.7版本支持由传统模式转换成GTID的在线切换,反之也能正常切换

七 跳过异常
  stop slave; # 关闭 slave 复制
  SET GTID_NEXT='$GTID_NO'; # 设置 GTID_NEXT 为复制出错的 GTID_NO
  begin; commit; # 向 $GTID_NO 写入空事务
  SET GTID_NEXT="AUTOMATIC"; # 重新设置 GTID_NEXT 为自动获取
  start slave; # 启动 slave 复制

程序员灯塔
转载请注明原文链接:mysql系列~GTID基础
喜欢 (0)