2014-10-20 15 views
11

Ich benutze MySql 5.5.37. Als root versuche ich eine Transaktion zu beenden, die einige Tabellen sperrt. Ich betreibeWie töte ich eine Transaktion in MySql als root?

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G 

und erhalten die Ausgabe

… 
*************************** 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 

Aber wenn ich eine „kill“ Anweisung ausführen, bekomme ich einen Fehler.

mysql> kill 158360; 
ERROR 1095 (HY000): You are not owner of thread 158360 

Wie lösche ich diese Transaktion von MySql?

Antwort

16

Sie können immer Ihren eigenen Thread beenden, aber Sie benötigen das SUPER-Privileg, um den Thread eines anderen zu töten.

Sind Sie auf RDS? In diesem Fall haben Sie keine SUPER-Berechtigung, auch wenn Ihr Benutzername "root" lautet. Es gibt nichts implizit Besonderes über den 'Root' Namen, es ist das Privileg, das zählt.

mysql> SHOW GRANTS; 

Was, wie den Thread zu töten, wenn diese RDS ist, können Sie eine Prozedur aufrufen rds_kill() es für Sie tun:

Sie können Ihre Privilegien durch Ausführen bestätigen.

+1

Tatsächlich verwenden wir RDS. Ihre Lösung funktioniert perfekt. – Dave

7

gerade abgeschlossen Bill Antwort, wenn Sie RDS MySQL verwenden, können Sie rds_kill() Verfahren, wie das folgende Beispiel verwenden:

Verbindung zum MySQL

Liste Prozess:

SHOW PROCESSLIST; 

In Mein Fall, ich möchte den Prozess von ID 1948452 zu töten:

CALL mysql.rds_kill(1948452); 

Erledigt