如何以root身份终止MySql中的事务?

Dav*_*ave 18 mysql deadlock transactions kill root

我正在使用MySql 5.5.37.作为root,我正试图杀死一个锁定某些表的事务.我跑

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G   
Run Code Online (Sandbox Code Playgroud)

并获得输出

…
*************************** 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
Run Code Online (Sandbox Code Playgroud)

但是当我运行"kill"语句时,我收到错误.

mysql> kill 158360;
ERROR 1095 (HY000): You are not owner of thread 158360
Run Code Online (Sandbox Code Playgroud)

如何从MySql中清除此事务?

Pau*_*tor 39

如果你正在使用RDS MySQL,只需填写Bill答案就可以使用rds_kill()程序,如下例所示:

连接到MySQL

列表流程:

SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我想杀死id 1948452的过程:

CALL mysql.rds_kill(1948452);
Run Code Online (Sandbox Code Playgroud)

完成


Bil*_*win 31

你总是可以杀死你自己的线程,但是你需要SUPER权限来杀死别人的线程.

你在RDS吗?如果是这样,即使您的用户名是"root",也没有SUPER权限.关于"根"名称没有任何含蓄的特殊之处,重要的是特权.

您可以通过运行来确认您的权限:

mysql> SHOW GRANTS;
Run Code Online (Sandbox Code Playgroud)

至于如何杀死线程,如果这是RDS,你可以调用一个程序rds_kill()来为你做.

  • 实际上,我们正在使用RDS。您的解决方案运行完美。 (2认同)

rem*_*ika 10

如果您使用的是 Azure Database for MySQL,则可以使用以下过程az_kill

列出流程:

SHOW PROCESSLIST;
Run Code Online (Sandbox Code Playgroud)

如果要终止的进程 ID 为 345,请运行:

CALL mysql.az_kill(345);
Run Code Online (Sandbox Code Playgroud)

即使当前登录的用户不拥有进程 345,此操作也有效。