zoukankan      html  css  js  c++  java
  • MySQL5.7 GTID学习笔记

    GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的。

    下表整理了GTID常用的查看命令,以及变量的描述及原理,供大家参考(以下基于MySQL5.7,对于MySQL5.6的GTID由于存在性能问题,不推荐使用)

    角色

    常用查看GTID的相关命令

    变量示例

    描述

    变量的更新时机

    master

    show global variables like '%gtid%';

    gtid_mode=ON

    GTID模式,开启GTID时在配置文件中开启

    gtid_mode参数的4种选项

    1> GTID_MODE = OFF : 不产生Normal_GTID,只接受来自master的ANONYMOUS_GTID

    2> GTID_MODE = OFF_PERMISSIVE : 不产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID

    3> GTID_MODE = ON_PERMISSIVE : 产生Normal_GTID,可以接受来自master的ANONYMOUS_GTID & Normal_GTID

    4> GTID_MODE = ON : 产生Normal_GTID,只接受来自master的Normal_GTID

    在my.cnf配置中指定,或者online可以通过下面修改

    SET @@GLOBAL.GTID_MODE=

    SET GLOBAL GTID_MODE=

    enforce_gtid_consistency=ON

    保证GTID安全的参数,开启GTID时在配置文件中开启

    ENFORCE_GTID_CONSISTENCY参数的3种选项

    1> OFF:所有事务允许违反gtid一致性。

    2> ON:没有事务允许违反gtid一致性。

    3> WARN:所有事务允许违反gtid一致性,但一个警告会产生,Mysql5.7.6新增。

    在my.cnf配置中指定,或者online可以通过下面修改

    SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY=

    SET GLOBAL ENFORCE_GTID_CONSISTENCY=

    gtid_executed=

    06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

    14361082-83ae-11e8-8328-883fd32565d6:1-1051075034

    执行过的所有GTID集合

    ordered_commit flush阶段生成GTID,在commit阶段才计入gtid_executed变量,在内存中实时更新

    gtid_purged=

    06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

    14361082-83ae-11e8-8328-883fd32565d6:1-1045677424

    由于binlog文件的删除(如purge binary logfiles或者超过expire_logs_days设置)已经丢失的GTID事务,同时在搭建从库时使用set global gtid_purged变量来标识哪些GTID事务已经执行过了。

    在MySQL触发清理binlog的情况下,比如purge binary logs to或者超过参数expire_logs_days设置的天数后自动删除,需要将丢失的GTID计入这个变量中

    gtid_owned=

    14361082-83ae-11e8-8328-883fd32565d6:1049600466#997780200

    分配GTID发生在GROUP COMMIT的第一个阶段,也就是flush stage,大概可以描述为:

    1、事务过程中,碰到第一条DML语句需要记录Binlog时,分配一段Gtid事件的cache,但不分配实际的GTID

    2、事务完成后,进入commit阶段,分配一个GTID并写入Step1预留的Gtid事件中,该GTID必须保证不在gtid_owned集合和gtid_executed集合中。 分配的GTID随后被加入到gtid_owned集合中。

    3、将Binlog 从线程cache中刷到Binlog文件中。

    4、将GTID加入到gtid_executed集合中。

    5、在完成sync stage 和commit stage后,各个会话将其使用的GTID从gtid_owned中移除。

    master

    show global variables like '%uuid%';

    server_uuid=14361082-83ae-11e8-8328-883fd32565d6

    server_uuid实际上是一个32字节+1字节(/0)的字符串。

    MySQL启动的时候会调用init_server_auto_options() 读取auto.cnf文件。如果没有读取到则调用generate_server_uuid()调用生成一个server_id。

    master

    select * from mysql.gtid_executed;

    source_uuid=14361082-83ae-11e8-8328-883fd32565d6

    uuid of the source where the transaction was originally executed.

    gtid_executed表是5.7.5以后新增的,是GTID持久化的介质,实例重启后读取这个表初始化。

    1、从库在binlog关闭或者binlog开启,参数log_slave_updates关闭的情况,实时将GTID持久化到gtid_executed表中。

    2、从库在binlog开启同时参数log_slave_updates开启的情况,不实时更新

    3、主库不实时更新。

    4、执行reset master时,清空表

    5、set global gtid_purged时,设置表

    interval_start=1

    First number of interval

    同上

    interval_end=1053828634

    Last number of interval

    同上

    master

    show master statusG

    Executed_Gtid_Set=

    06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

    14361082-83ae-11e8-8328-883fd32565d6:1-1054196743

    执行过的所有GTID集合

    同gtid_executed

    master

    Mysqlbinlog -vvv SVR14077HW2288-bin.030734|less

    Previous-GTIDs=

    # 14361082-83ae-11e8-8328-883fd32565d6:1-1055704939,

    #e36c6adf-fe56-11e6-9f8e-883fd325654a:74434853-7475373424

    Previous gtid Event是包含在每一个binlog的开头用于描述所有以前binlog所包含的全部Gtid的一个集合

    (包括已经删除的binlog)

    产生的binlog中开头会包含这个值

    在5.7中不开启GTID也会包含这个Previous gtid Event

    slave

    show slave statusG

    Master_UUID: 14361082-83ae-11e8-8328-883fd32565d6

    对应master的server_uuid

    Retrieved_Gtid_Set:14361082-83ae-11e8-8328-883fd32565d6:962977557-1057333221

    IO线程已经读取的GTID的集合

    1、IO线程收到一个GTID EVENT就会把它加入到Retrieved_Gtid_Set中

    2、MySQL重启时会从relay log中初始化Retrieved_Gtid_Set

    Executed_Gtid_Set:06ae7c12-fe57-11e6-b021-883fd32565d6:1-4792038936,

    14361082-83ae-11e8-8328-883fd32565d6:1-1057333220

    表示SQL线程已经执行的GTID的集合

    主库的binlog在从库应用时,会更新Executed_Gtid_Set值

  • 相关阅读:
    【转】常用 Java 静态代码分析工具的分析与比较
    转-SQL Server系列-我感觉自己不用写了,很清晰很有条理
    转-SQL Server Alwayson概念总结
    超级快的python vibora.io框架
    [转]做超炫图表,数据可视化的优雅实现方案 (硬核科普)
    统计资料下载论坛
    [FW]Windows7 Python-3.6 安装PyCrypto(pycrypto 2.6.1)出现错误以及解决方法
    国内外常用公共NTP网络时间服务器
    HTTP Error 500.24
    step7 microwin v4.0 sp9 win7 64位首次安装s7-200的软件,首次使用西门子软件,每次提示这个信息,怎么解决,网上有说,倒入注册表信息,按照下图进行操作还是不行,求各位高手指点一下,谢谢!
  • 原文地址:https://www.cnblogs.com/wangdong/p/9808871.html
Copyright © 2011-2022 走看看