我正在使用MySql 5.5.37。作为root,我正试图杀死一个锁定某些表的事务。我跑
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
并获取输出
…
*************************** 6. row ***************************
trx_id: 143E6CDE
trx_state: RUNNING
trx_started: 2014-10-20 06:03:56
trx_requested_lock_id: NULL
trx_wait_started: NULL
trx_weight: 2305887
trx_mysql_thread_id: 158360
trx_query: delete from event where id not in (select q.* from (select e.id FROM event e, (select object_id, max(date_processed) d from event group by object_id) o where e.object_id = o.object_id and e.date_processed = o.d) q)
trx_operation_state: NULL
trx_tables_in_use: 3
trx_tables_locked: 3
trx_lock_structs: 210634
trx_lock_memory_bytes: 19790264
trx_rows_locked: 10668793
trx_rows_modified: 2095253
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
但是当我运行“kill”语句时,我收到错误。
mysql> kill 158360;
ERROR 1095 (HY000): You are not owner of thread 158360
如何从MySql清除此事务?
答案 0 :(得分:28)
如果您正在使用RDS MySQL,只需填写Bill答案即可使用rds_kill()程序,如下例所示:
连接MySQL
列出流程:
SHOW PROCESSLIST;
在我的情况下,我想杀死id 1948452的过程:
CALL mysql.rds_kill(1948452);
完成
答案 1 :(得分:27)
你总是可以杀死你自己的线程,但是你需要超级特权来杀死别人的线程。
你在RDS吗?如果是这样,即使您的用户名是' root',您也没有SUPER权限。关于&root;' root'根本没什么含义特别的。名称,它是重要的特权。
您可以通过运行以下方式确认您的权限:
mysql> SHOW GRANTS;
至于如何杀死线程,如果这是RDS,你可以调用一个程序rds_kill()为你做。
答案 2 :(得分:0)
如果您将Azure数据库用于MySQL,则可以使用过程az_kill
:
列出过程:
SHOW PROCESSLIST;
如果要终止的进程的ID为345,请运行:
CALL mysql.az_kill(345);
即使当前登录的用户不拥有进程345,此方法也有效。