我正在测试一些使用 MySQL 全局事务 ID (GTID) 的工作,但我很难获得最新的会话 GTID。我已启用 GTID(全局gtid_mode
设置为ON_PERMISSIVE
)。根据以下文档gtid_owned
:
此只读变量包含一个列表,其内容取决于其范围。当与会话范围一起使用时,该列表包含该客户端拥有的所有 GTID;...
因此,我希望在提交事务后,此会话变量将包含 GTID;但无论我做什么,它总是空的。但是,gtid_executed
每次我提交事务时全局都会发生变化,所以我知道 GTID 正在工作。
这是一个演示此问题的会话:
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> START TRANSACTION;
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> INSERT INTO ........
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-4 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> COMMIT;
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-5 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
mysql> INSERT INTO ........
mysql> SELECT @@global.gtid_executed;
| a1c32161-89c4-11e8-856e-0242ac12001d:1-6 |
mysql> SELECT @@session.gtid_next;
| AUTOMATIC |
mysql> SELECT @@session.gtid_owned;
| |
请注意,每次提交事务(显式或隐式/自动提交)时,已执行 GTID 的全局列表都会增加,但会话gtid_owned
始终为空。
我在做什么错/错过了什么?还是我发现了一个错误?