本篇内容介绍了“Mysql 5.7中mysql.gtid_executed表及其他变量更改时机是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
mysql.gtid_executed表修改时机
在binlog发生切换(rotate)的时候保存直到上一个binlog文件执行过的全部Gtid,它不是实时更新的。
栈帧如下:
其主要逻辑在Gtid_state::save_gtids_of_last_binlog_into_table 中我们在随后的部分讨论这个函数逻辑。
gtid_executed变量修改时机
如前文所述ordered_commit flush阶段生成Gtid,在commit阶段才计入gtid_executed变量,它是实时更新的。
栈帧如下:
其主要逻辑在Gtid_state::update_gtids_impl中我们在随后的部分讨论这个函数逻辑。
gtid_purged变量修改时机
在Mysql触发的清理binlog的情况下,比如purge binary logs to或者超过参数expire_logs_days设置的天数后自动删除,需要将丢失的Gtid计入这个变量中。
栈帧如下:
其主要逻辑在MYSQL_BIN_LOG::purge_logs中,我们随后查看其代码片段,同时MYSQL_BIN_LOG::init_gtid_sets函数是一个及其重要的函数,主要用在:
Mysql启动时候初始化整个Gtid_state中的各种Gtid_set。
Mysql删除binlog(免费主机域名如purge binary logfiles或者超过expire_logs_days设置)后需要确认gtid_purged变量(及Gtid_state.lost_gtids)的值的时候。
随后我会单独一节来讲解Mysql Gtid模块的初始化还会讲解这个函数。
这里就对上面提到的主要逻辑函数进行分析
Gtid_state::save_gtids_of_last_binlog_into_table函数逻辑
Gtid_state::update_gtids_impl函数代码片段
MYSQL_BIN_LOG::purge_logs函数代码片段
这种情况sql_thread执行过的Gtid事物可以通过binlog进行维护,所以mysql.gtid_executed表和gtid_purged变量不需要实时更新。
mysql.gtid_executed表修改时机
和主库一致。及在进行日志切换的时候进行更新,不做讨论
gtid_executed变量修改时机
和主库一样实时更新,不做讨论
gtid_purged变量修改时机 免费主机域名
和主库一致,binlog删除时更新,不做讨论
commit_owned_gtids函数逻辑:
Gtid_state::update_gtids_impl_own_gtid 函数逻辑片段
这个函数是5.7.17的,5.7.14没有逻辑放到了Gtid_state::update_gtids_impl中
mysql.gtid_executed表修改时机在reset master的时候清空本表
栈帧如下:
其主要逻辑在Gtid_state::clear中。在set global gitd_purged的时候,设置本表
栈帧如下:
其主要逻辑在Gtid_state::add_lost_gtids中。
gtid_executed变量修改时机在reset master的时候清空本变量
栈帧同上 在set global gitd_purged的时候,设置本变量
栈帧同上 在mysql启动的时候初始化设置gtid_executed变量,这个将在后面章节详细描述描述步骤。
gtid_purged变量修改时机在reset master的时候清空本变量
栈帧同上 在set global gitd_purged的时候,设置本变量
栈帧同上 在mysql启动的时候初始化设置gtid_executed变量,这个将在后面章节详细描述描述步骤。
Gtid_state::clear函数逻辑
Gtid_state::add_lost_gtids函数逻辑 “Mysql 5.7中mysql.gtid_executed表及其他变量更改时机是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注云技术网站,小编将为大家输出更多高质量的实用文章!
本篇文章给大家分享的是有关新建立的数据库相关问题分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。免费主机域名建立数据库后遇到了很多的问题。现在在这里总结一下:1:刚刚安装好后ssh连接不上解决办…