我有一个要调试的应用程序,它对 MySQL 数据库执行几十个操作。这些操作在单个事务中执行。在特定断点进行调试时,我需要知道数据库的状态。
mysql
我可以使用常用的CLI 工具登录 MySQL 服务。我看到正在进行的交易:
mysql> SELECT * FROM information_schema.innodb_trx\G
*************************** 1. row ***************************
trx_id: 325090
trx_state: RUNNING
trx_started: 2022-09-14 12:10:32
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 30
trx_mysql_thread_id: 26
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 10
trx_lock_structs: 26
trx_lock_memory_bytes: 1128
trx_rows_locked: 43
trx_rows_modified: 4
trx_concurrency_tickets: 0
trx_isolation_level: REPEATABLE READ
trx_unique_checks: 1
trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULL
trx_adaptive_hash_latched: 0
trx_adaptive_hash_timeout: 0
trx_is_read_only: 0
trx_autocommit_non_locking: 0
trx_schedule_weight: NULL
1 row in set (0.01 sec)
现在,如何加入该事务以在事务期间查询数据库的状态?
作为一种解决方法,我可以向应用程序代码添加查询。但是,这需要我在运行应用程序之前知道要运行哪个查询,然后为要运行的每个查询重新编译应用程序。有一个开放的 CLI 来调试会非常有帮助。
该数据库是在 Debian 上运行的 MySQL 8.0。
用户JD在评论中回答,我将信息放在这里以供我未来的自己和他人使用。如果 JD 回复回复,我会接受。
读取未提交事务的术语是脏读。要执行脏读,需要启用Read Uncommitted Isolation 级别。