复制信息记录表|全方位认识 mysql 系统库( 三 )


2.4.前面介绍的三张表中,存放的都不包括GTID信息,在数据库运行过程中,GTID相关的信息是保存在下的相关表中,详见"全方位认识 "系列文章《复制状态与变量记录表 | 全方位介绍》 。但是下的表都是内存表,记录的信息是易失的 。表才是GTID信息的持久表,该表提供查询与当前实例中的数据一致的GTID集合(该表用于存储所有事务分配的 GTID集合,GTID集合由UUID集合构成,每个UUID集合的组成为:uuid:[:]...,例如 :-3dfb-11e8-a76d-:1-,-3dfb-11e8-a448-:1-)从MySQL 5.7.5开始,GTID存储在mysql数据库的名为的表中 。对于每个GTID集合,默认情况下值记录每个GTID集合的起始和结束的事务号对应的GTID,该表只在数据库初始化或者执行升级的时候创建,不允许手工创建于修改 。
当实例本身有客户端访问数据写入或者有从其他主库通过复制插件同步数据的时候,该表中会有新的GTID记录写入,另外,该表中的记录还会在滚动或者实例重启的时候被更新(日志滚动时该表需要把除了最新的之外其他中的所有GTID结合记录到该表中,实例重启时,需要把所有的中的GTID集合记录到该表中) 。由于有mysql.表记录GTID(避免了丢失的时候丢失GTID历史记录),所以,从5.7.5版本开始,在复制拓扑中的从库允许关闭,也允许在开启的情况下关闭变量 。由于GTID必须要再为ON或者为时才会生成,所以自然该表中的记录也需要依赖于变量为ON或时才会进行记录,另外,该表中是否实时存储GTID,取决于日志是否开启,或者启用时是否启用变量,如下:该表中的记录周期性执行压缩示例 。
# 假设表中有如下实时记录的GTID记录mysql> SELECT * FROM mysql.gtid_executed;+ -------------------------------------- + ---------- ------ + -------------- +| source_uuid | interval_start | interval_end || -------------------------------------- + ---------- ------ + -------------- || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 37 | 37 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 38 | 38 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 39 | 39 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 40 | 40 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 41 | 41 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 42 | 42 || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 43 | 43 |...# 那么,每达到gtid_executed_compression_period变量定义的事务个数时,激活压缩功能,GTID被压缩为一行记录,如下+ -------------------------------------- + ---------- ------ + -------------- +| source_uuid | interval_start | interval_end || -------------------------------------- + ---------- ------ + -------------- || 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 37 | 43 |...# 注意:当gtid_executed_compression_period系统变量设置为0时,周期性自动压缩功能失效,你需要预防该表被撑爆的风险
表字段含义 。对该表的压缩功能由名为 /sql/ 的专用前台线程执行 。该线程使用SHOW 无法查看,但它可以在.表中查看到(线程 /sql/ 大多数时候都处于休眠状态,直到每满个事务之后,该线程被唤醒以执行前面所述的对mysql.表的压缩 。然后继续进入睡眠状态,直到下一次满个事务,然后被唤醒再次执行压缩,以此类推,无限重复此循环 。但如果当关闭或者启用但关闭变量时,变量被设置为了0,那么意味着该线程会始终处于休眠状态且永不会唤醒),如下所示:
【复制信息记录表|全方位认识 mysql 系统库】mysql> SELECT * FROM performance_schema.threads WHERE NAME LIKE '%gtid%'\G*************************** 1. row ***************************THREAD_ID: 26NAME: thread/sql/compress_gtid_tableTYPE: FOREGROUNDPROCESSLIST_ID: 1PROCESSLIST_USER: NULLPROCESSLIST_HOST: NULLPROCESSLIST_DB: NULLPROCESSLIST_COMMAND: DaemonPROCESSLIST_TIME: 1509PROCESSLIST_STATE: SuspendingPROCESSLIST_INFO: NULLPARENT_THREAD_ID: 1ROLE: NULLINSTRUMENTED: YESHISTORY: YESCONNECTION_TYPE: NULLTHREAD_OS_ID: 18677