2014-10-20 4 views
11

MySql 5.5.37을 사용하고 있습니다. 루트로서, 나는 테이블을 잠그고있는 트랜잭션을 죽이려고한다. 나는 MySql의 트랜잭션을 루트로 어떻게 죽입니까?

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 

를 얻을 그러나 나는 "죽이는"문을 실행할 때 오류가 발생합니다.

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

MySql에서이 트랜잭션을 어떻게 지울 수 있습니까?

답변

16

당신은 항상 자신의 스레드를 죽일 수 있지만 다른 사람의 스레드를 죽이기 위해서는 SUPER 권한이 필요합니다.

RDS를 사용하고 계십니까? 그렇다면 사용자 이름이 '루트'인 경우에도 SUPER 권한이 없습니다. 암묵적으로 '루트'이름에 특별한 의미는 없습니다. 그 특권은 중요합니다.

당신은 실행하여 권한을 확인할 수 있습니다 :이 RDS 경우, 당신은 당신을 위해 그것을 할 수있는 절차 rds_kill()를 호출 할 수 있습니다, 스레드를 죽이는 방법에 관해서는

mysql> SHOW GRANTS; 

합니다.

연결 목록 과정

MySQL의

에 :

SHOW PROCESSLIST; 

에서 다음과 같은 예를 들어, RDS MySQL은 당신이 rds_kill() 프로 시저를 사용하여 사용하는 경우

+1

실제로 우리는 RDS를 사용하고 있습니다. 귀하의 솔루션은 완벽하게 작동합니다. – Dave

7

그냥 빌 응답을 완료 내 경우, 나는 이드의 과정을 죽이고 싶다. ID : 1948452 :

CALL mysql.rds_kill(1948452); 

완료