J'utilise MySql 5.5.37. En tant que root, j'essaie de supprimer une transaction qui verrouille certaines tables. je cours
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G
et obtenir la sortie
…
*************************** 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
Mais lorsque je lance une instruction "kill", j'obtiens une erreur.
mysql> kill 158360;
ERROR 1095 (HY000): You are not owner of thread 158360
Comment effacer cette transaction de MySql?
Vous pouvez toujours tuer votre propre thread, mais vous avez besoin du privilège SUPER pour tuer le thread de quelqu'un d'autre.
Êtes-vous sur RDS? Si tel est le cas, vous ne disposez pas du privilège SUPER, même si votre nom d'utilisateur est 'root'. Le nom de la racine n'a rien d'implicite, c'est le privilège qui compte.
Vous pouvez confirmer vos privilèges en lançant:
mysql> SHOW GRANTS;
Pour ce qui est de savoir comment tuer le thread, s’il s’agit de RDS, vous pouvez appeler une procédure rds_kill () pour le faire à votre place.
Pour compléter la réponse à la question si vous utilisez RDS MySQL, vous pouvez utiliser la procédure rds_kill (), comme dans l'exemple suivant:
Se connecter à MySQL
Processus de liste:
SHOW PROCESSLIST;
Dans mon cas, je veux tuer le processus d'identification 1948452:
CALL mysql.rds_kill(1948452);
Terminé
Si vous utilisez Azure Database for MySQL, vous pouvez utiliser la procédure az_kill
:
Processus de liste:
SHOW PROCESSLIST;
Dans le cas où l'ID du processus à tuer est 345, exécutez:
CALL mysql.az_kill(345);
Cela fonctionne même si l'utilisateur actuellement connecté ne possède pas le processus 345.