Mysql транзакция зависла - сохраняется после перезапуска сервера
select * from INFORMATION_SCHEMA.INNODB_TRX\G;
*************************** 1. row ***************************
trx_id: 41844623
trx_state: RUNNING
trx_started: 2016-11-23 15:40:42
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 71
trx_mysql_thread_id: 0
trx_query: NULL
trx_operation_state: NULL
trx_tables_in_use: 0
trx_tables_locked: 6
trx_lock_structs: 7
trx_lock_memory_bytes: 1136
trx_rows_locked: 1
trx_rows_modified: 64
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: 10000
trx_is_read_only: 0
trx_autocommit_non_locking: 0
Есть ли способ убить транзакцию MySQL по ее trx_id? Или очистить это как-нибудь? Нет никакого идентификатора потока MySQL или идентификатора запроса, связанного с этой транзакцией, и это сохраняется после перезапуска сервера.
2 ответа
Попробуйте это исправить. Использование:
mysql> xa recover convert xid;
затем передайте их, используя:
mysql> xa commit 0x01020304627175616C;
Это распределенная транзакция. Он ожидает совершения или отката.
http://dev.mysql.com/doc/refman/5.7/en/xa-statements.html
Чтобы просмотреть ожидающие распределенные транзакции, перейдите в командную строку MySQL и введите:
XA RECOVER;
Для отката транзакции возьмите данные, найденные в столбце данных, из вывода XA Recover. Поэтому, если в столбце данных указано "X12345":
XA ROLLBACK 'X12345'