设为首页 收藏本站
查看: 1355|回复: 0

[经验分享] 【20180608】MySQL5.7新增表mysql.gtid_executed

[复制链接]

尚未签到

发表于 2018-10-5 12:09:15 | 显示全部楼层 |阅读模式
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表的自动压缩。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-612645-1-1.html 上篇帖子: Mysql执行计划查看 下篇帖子: keepalived+mysql主主实现高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表