MySQL Status Ongoing_automatic_gtid_violating_transaction_count 数据库状态作用意思及如何正确
本站中文解释
MySQL status 变量 Ongoing_automatic_gtid_violating_transaction_count 指示了由于 Global Transaction ID (GTID) 的冲突(例如以前未提交事务),正在执行中的自动回滚(ROLLBACK)操作个数。
GTID 是什么?它是 MySQL 5.6 版本中引入的一种由 MySQL 找标识每个事务的功能。每个事务都有唯一的 ID,它由 UUID 与一个序列组成, UUID 包含 MySQL 服务器的 ID,而序列是事务的计数。GTID 能帮助确保 MySQL 在复制多个服务器上的执行顺序一致性。
GTID 的冲突发生在已有事务开始在服务器上执行,而另一个 GTID 标识的事务却更早开始,但后来却没有提交的情况下,冲突 GTID 会被前面未提交的事务覆盖。
MySQL Status变量 Ongoing_automatic_gtid_violating_transaction_count 是用来跟踪这种前请求回滚(ROLLBACK)操作的次数。它可以通过在参数文件(my.cnf)中设置 log_automatic_gtid_violating_transactions 来激活,以便将所有试图写入已经被未提交事务覆盖的 GTID 保存在错误日志中。
除了将 log_automatic_gtid_violating_transactions 设置为 ON,还需要将 log_warnings 设置为 2 或更高,以便启用 GTID 的警告记录,同时应保证该值不会超过 3,以免将其他警告记录更改为日志文件。如果要更改 log_automatic_gtid_violating_transactions,你需要使用 FLUSH LOGS 命令,其将生效且将覆盖以前的 GTID 冲突警告。
此外,你还可以通过运行 SHOW GLOBAL STATUS 语句或登录到 MySQL 命令行下,查询 Ongoing_automatic_gtid_violating_transaction_count 当前的值,以确定 GTID 冲突是否发生:
mysql> SHOW GLOBAL STATUS LIKE ‘Ongoing_automatic_gtid_violating_transaction_count’;
+—————————————————-+——————+
| Variable_name | Value |
+—————————————————-+——————+
| Ongoing_automatic_gtid_violating_transaction_count | 0 |
+—————————————————-+——————+
1 row in set (0.00 sec)