MySQL5.7新增表mysql.gtid_executed

MySQL5.6主从,从库获取gtid_executed

在MySQL5.6的时候,主从复制开启了GTID,在slave执行show slave status \G的时候可以获取得到当前执行的GTID的集合信息。在MySQL5.6的时候这个值并不是持久化到文件或者数据库表中的,而是每次在slave重启的时候从最后一个binlog文件的末尾读取写入内存中去的。那么这个样子就会造成一个问题,在从库没有开启log_slave_updates这个参数的时候或者说维护人员不小心将binlog文件给删除了之后,那么slave重启之后就会获取不到gtid_executed的值,那么主从环境就会挂掉。

并且还需要注意的一点就是,就算我们开启了log_slave_updates这个参数,将所有来自于master的事务在本地回放的时候写入slave本地的binlog中去的话,那么不可避免会造成磁盘IO和磁盘空间资源的浪费。

MySQL5.7新增的mysql.gtid_executed

在MySQL5.7的时候则将gtid_executed的信息持久化到了表中,这个表就是mysql.gtid_executed表:

root@mysqldb 11:03: [(none)]> show create table mysql.gtid_executed \G

*************************** 1. row ***************************

Table: gtid_executed

Create Table: CREATE TABLE `gtid_executed` (

`source_uuid` char(36) NOT NULL COMMENT 'uuid of the source where the transaction was originally executed.',

`interval_start` bigint(20) NOT NULL COMMENT 'First number of interval.',

`interval_end` bigint(20) NOT NULL COMMENT 'Last number of interval.',

PRIMARY KEY (`source_uuid`,`interval_start`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 STATS_PERSISTENT=0

执行SQL可以看到这个表的一些具体信息:

root@mysqldb 11:04: [(none)]> select * from mysql.gtid_executed ;

+--------------------------------------+----------------+--------------+

| source_uuid | interval_start | interval_end |

+--------------------------------------+----------------+--------------+

| 4725234c-1acc-11e8-9ff9-000c29a80f41 | 1 | 781 |

| 4725234c-1acc-11e8-9ff9-000c29a80f41 | 989 | 1011 |

| 4cf4a087-1ba3-11e8-92f6-000c2920ceb4 | 1 | 2239 |

+--------------------------------------+----------------+--------------+

3 rows in set (0.00 sec)

新增mysql.gtid_executed表之后,slave重启之后可以直接从这个表中获取信息。需要注意的是mysql.gtid_executed是在主从服务器上面都会进行更新的,而表slave_relay_log_info仅仅只是在从服务器进行更新的。

可以看到上述的表mysql.gtid_executed并没有记录每个事务的GTID的值,而是记录了GTID的起始值和末尾值,这个是因为为了避免这个表的记录疯狂的增长,所以MySQL5.7引入了一个新的进程进行专门的压缩,并且有专门的参数来设置这个压缩比。

root@mysqldb 11:58: [(none)]> select thread_id,thread_os_id,name,processlist_command,processlist_state from performance_schema.threads where name like '%compress%';

+-----------+--------------+--------------------------------+---------------------+-------------------+

| thread_id | thread_os_id | name | processlist_command | processlist_state |

+-----------+--------------+--------------------------------+---------------------+-------------------+

| 27 | 23839 | thread/sql/compress_gtid_table | Daemon | Suspending |

+-----------+--------------+--------------------------------+---------------------+-------------------+

1 row in set (0.00 sec)

root@mysqldb 11:59: [(none)]> show global variables like 'gtid_executed_compression_period';

+----------------------------------+-------+

| Variable_name | Value |

+----------------------------------+-------+

| gtid_executed_compression_period | 1000 |

+----------------------------------+-------+

1 row in set (0.01 sec)

root@mysqldb 11:59: [(none)]>

还有一点需要我们注意的:mysql.gtid_executed的记录方式是和从库是否开启记录二进制日志是有很大的关系的。若是slave开启了二进制日志,则该表只会在二进制日志切割的时候或者MySQL正常关闭进行更新,否则的话就会进行实时的更新。还有需要注意的一点就是,在MySQL异常关闭的时候GTID的信息是不会记录到这个表中的,在MySQL恢复的时候会从binlog中记录写入这个表中的。

当binlog开启的时候,并且exectued_gtids_compression_period值未使用的时候,MySQL的binlog轮换也会引起mysql.gtid_executed表的自动压缩。

mysql.gtid executed_【20180608】MySQL5.7新增表mysql.gtid_executed相关推荐

  1. mysql.gtid executed_MYSQL 5.7中新增的表GTID_EXECUTED

    MYSQL 5.7中新增的表GTID_EXECUTED 正文 MySQL 5.6版本开启GTID模式,必须要先打开参数log_slave_updates,简单来说就是一定在从机上再记录一份二进制日志. ...

  2. mysql 存储过程新增表,mysql实例 存储过程中向表中添加数据

    摘要 腾兴网为您分享:mysql实例 存储过程中向表中添加数据,信和财富,视达网,人人视频,企商理财等软件知识,以及电视猫,office2000,贵阳银行,搜电共享充电宝,雅图电影院,达达跑腿,万圣节 ...

  3. goods购物表MySQL的代码_第一节:数据库及表

    在Mysql中建立一个数据库cart,在库中建立两个表,分别是:goods(商品表),order(订单表). 本教程用命令创建数据库,用命令创建数据库习惯了,比用PhpMyAdmin快,因为用phpM ...

  4. mysql 命令行 外键_MySQL命令行MySql外键设置详解

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...

  5. vc6.0 点击鼠标获取mysql数据库所在行_VC6.0连接到mysql数据库

    (1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的"Show directories for:"下拉列表中选中"I ...

  6. mysql update多个字段_常见的MySQL命令大全fourth

    1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> Create DATABASE ...

  7. prometheus监控mysql慢查询_使用Grafana+Prometheus监控mysql服务性能

    prometheus(也叫普罗米修斯)官网: grafana官网: 特征 普罗米修斯的主要特点是: 具有由度量名称和键/值对标识的时间序列数据的 一个 来利用这一维度 不依赖分布式存储; 单个服务器节 ...

  8. 命令开启 停止mysql服务_windows 下命令行启动停止mysql

    MySQL比较好玩一点就是它可以用多种方式启动,当然它也可以用多种方式关闭.下面我就mysql的几种启动方式简单的谈一谈,希望可以给大家提供一些参考. 第一种,用mysqld-nt来启动. 在没有进行 ...

  9. MySQL5.7新增Performance Schema表

    在前面有几篇博客我们已经介绍过MySQL5.6的Performance Schema,详细可点击博客1,博客2,博客3.在MySQL5.6里这些PS表已经包含了足够丰富的信息,帮助我们来分析MySQL ...

最新文章

  1. 递归和迭代的区别是什么,各有什么优缺点?
  2. 快捷进入开发状态,这里很简单~
  3. iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象
  4. 继续深入更新shell脚本容易出错的地方
  5. 直连数据库实时更新数据,可视化报表这么做简直牛
  6. Ubuntu 16.4中root不能使用tab键来补全命令的解决方法
  7. termux 开启 sshd
  8. Oracle 连接查询的理解
  9. 惊叹C4D设计作品分享,超级给力的灵感
  10. 废品机械师双脚机器人教程_废品机械师自动寻物机器人图文教程_快吧单机游戏...
  11. 个性化推荐中的数据稀疏性
  12. 有服主传送玩家指令_我的世界:不用指令能够到达边境之地吗?实验证明,根本就不可能...
  13. 百度编辑器上传图片配置php,谁配置过百度编辑器ueditor1.4.3的图片上传路径?
  14. 前端小报 - 201812 月刊
  15. 如何设置高度为1的分隔线
  16. 基于stm32的数控恒压恒流电源设计方案
  17. egret的eui以及exml使用
  18. 一款非常棒的开源微社区轻论坛类源码
  19. 备份数据库 并发送到邮箱
  20. 南卡和三星哪款蓝牙耳机音质好些?高颜值且音质好的蓝牙耳机测评

热门文章

  1. CC2530,zigbee,协议栈,代码集(应用层,硬件层)
  2. 三菱FX3U版本V11源代码
  3. 啤酒与饮料(C语言)
  4. 新浪微博开发之项目分析与设计
  5. 浙江大学754西医综合
  6. anchorPoint随记
  7. Web Farm网络负载均衡
  8. Redis事务,Redis实现悲观锁,乐观锁
  9. 无涯教程- Java 14 – Record类型介绍
  10. 防火墙Little Snitch的BUG导致Mac系统受到攻击