Подтвердить что ты не робот

Как убить транзакцию в MySql как root?

Im, используя 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?

4b9b3361

Ответ 1

Вы всегда можете убить свой собственный поток, но вам нужна привилегия SUPER, чтобы убить кого-то еще.

Вы на RDS? Если это так, у вас нет привилегии SUPER, даже если ваше имя пользователя "root". Здесь нет ничего особого в отношении имени "root", это привилегия, которая учитывается.

Вы можете подтвердить свои привилегии, выполнив:

mysql> SHOW GRANTS;

Что касается того, как убить поток, если это RDS, вы можете вызвать процедуру rds_kill(), чтобы сделать это за вас.

Ответ 2

Просто для завершения ответа Билла, если вы используете RDS MySQL, вы можете использовать процедуру rds_kill() в следующем примере:

Подключение к MySQL

Процесс списка:

SHOW PROCESSLIST;

В моем случае я хочу убить процесс id 1948452:

CALL mysql.rds_kill(1948452);

Готово