RDS MySQL出现trx_mysql_thread_id为0的问题

问题描述

RDS MySQL出现如下报错:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

查询information_schema.innodb_trx表发现trx_mysql_thread_id0的事务未提交。

image

问题原因

trx_mysql_thread_id0表示存在XA(分布式)事务,XA事务未提交导致了锁阻塞。

解决方案

  1. 使用xa recover;命令查询当前未提交的XA事务。

    image

  2. 查询到XA事务后,您可以根据业务需求选择回滚或者提交这些事务。命令如下:

    • 提交(commit)XA事务:

      xa commit 'gtrid_length(data)','bqual_length(data)',formatID;

      以上图为例,具体命令如下:

      xa commit '123','_abc',100;
    • 回滚(rollback)XA事务:

      xa rollback 'gtrid_length(data)','bqual_length(data)',formatID;

      以上图为例,具体命令如下:

      xa rollback '123','_abc',100;

更多XA事务语法,请参见MySQL官方文档