web-dev-qa-db-fra.com

La suppression de la table fait bloquer MySQL

Lorsque j'essaie de supprimer une table, MySQL se bloque. Je n'ai pas d'autres sessions ouvertes. Comment résoudre ça? J'ai attendu 10 heures et le processus n'est pas terminé.

22
cool_cs
Waiting for table metadata lock
drop table tableA name

SELECT l1.lat, l1.lon, l2.zipcode FROM tableA l1, tableBl2 where l1.lat = l2.latitude and l1.lon = l2.longitude limit 10

Si c'est votre table, voir ce lien

vous avez un blocage implicite. Tuez les autres transactions pour libérer la goutte ou tuez-la pour libérer les autres transactions.

Vous pouvez utiliser KILL thread_id, dans sql_plus.


J'ajoute des informations supplémentaires depuis que j'ai trouvé une autre expérience intéressante.

Metadata Des verrous morts peuvent également se produire entre une opération ddl sur une table donnée (drop, alter...) et un select requête sur cette table.

Oui, select.

Donc, si vous bouclez sur un curseur dans mysql (ou php, par exemple avec pdo::fetch), et vous exécutez une instruction ddl sur les mêmes tables, vous obtiendrez un blocage.

Une solution à ce scénario atypique consiste à libérer systématiquement les verrous implicites avec une instruction commit une fois que toute instruction select est complètement récupérée.

18
Sebas

Redémarrer MySQL n'est peut-être pas la plus jolie solution, mais cela a fonctionné pour moi:

Sudo /etc/init.d/mysql restart
mysqladmin drop YOURDATABASE
13
kqw

J'essaie une réponse plus facile pour les débutants comme je le suis:

1) exécuter:

SHOW PROCESSLIST

si vous obtenez quelque chose comme:

+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
| Id | User            | Host            | db     | Command    | Time      | State                           | Info                                              |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
|  4 | event_scheduler | localhost       | NULL   | Daemon     | 580410103 | Waiting on empty queue          | NULL                                              |
| 13 | root            | localhost:50627 | airbnb | Sleep      |     10344 |                                 | NULL                                              |
| 17 | root            | localhost:50877 | NULL   | Query      |      2356 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 18 | root            | localhost:50878 | airbnb | Query      |      2366 | Waiting for table metadata lock | DROP TABLE `airbnb`.`characteristics`             |
| 21 | root            | localhost:51281 | airbnb | Query      |      2305 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type`        |
| 22 | root            | localhost:51282 | airbnb | Query      |      2301 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`characteristics`      |
| 23 | root            | localhost:51290 | airbnb | Query      |      2270 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`property_type`   |
| 24 | root            | localhost:51296 | airbnb | Query      |      2240 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`property_type`        |
| 26 | root            | localhost:51303 | NULL   | Query      |      2212 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 27 | root            | localhost:51304 | NULL   | Query      |      2218 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type`        |
| 29 | root            | localhost:51306 | NULL   | Query      |      2176 | Waiting for table metadata lock | SHOW INDEXES FROM `airbnb`.`characteristics`      |
| 30 | root            | localhost:51308 | NULL   | Query      |      2122 | Waiting for table metadata lock | DROP TABLE `airbnb`.`characteristics`             |
| 34 | root            | localhost:51312 | NULL   | Query      |      2063 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 35 | root            | localhost:51313 | NULL   | Query      |      2066 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type`        |
| 39 | root            | localhost:51338 | NULL   | Query      |      2004 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`characteristics` |
| 40 | root            | localhost:51339 | NULL   | Query      |      2008 | Waiting for table metadata lock | SHOW FULL COLUMNS FROM `airbnb`.`bed_type`        |
| 45 | root            | localhost       | airbnb | Field List |       997 | Waiting for table metadata lock |                                                   |
| 46 | root            | localhost       | airbnb | Field List |       798 | Waiting for table metadata lock |                                                   |
| 53 | root            | localhost       | airbnb | Query      |         0 | starting                        | SHOW PROCESSLIST                                  |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+

avec l'État: en attente du verrouillage des métadonnées de la table (comme mentionné dans la réponse officielle)

2) KILL 13 (13 correspondant à l'identifiant).

S'il s'agit bien d'une impasse, tous les processus suivants se poursuivront normalement.

5
Golddy