programing

테이블을 떨어뜨리면 MySQL이 중단됩니다.

testmans 2023. 10. 2. 11:16
반응형

테이블을 떨어뜨리면 MySQL이 중단됩니다.

테이블을 떨어뜨리려고 하면 MySQL이 중단됩니다.다른 공개 세션은 없습니다.이 문제를 해결하는 방법은?저는 10시간을 기다렸는데 아직 그 과정이 종료되지 않았습니다.

저는 지금처럼 초보자들을 위해 더 쉬운 답을 시도하고 있습니다.

1) 실행:

SHOW PROCESSLIST

다음과 같은 것을 얻는다면:

+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+
| 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                                  |
+----+-----------------+-----------------+--------+------------+-----------+---------------------------------+---------------------------------------------------+

with State : 테이블 메타데이터 잠금 대기(공식 답변에 언급된 바와 같이)

2)KILL 13(Id에 해당하는 13개의 코어).

정말 교착상태라면, 다음의 모든 과정은 정상적으로 진행될 것입니다.

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

이것이 당신의 테이블이라면, 이 링크를 참조하세요.

당신은 암묵적인 교착상태에 빠졌습니다.다른 트랜잭션을 삭제하여 드롭을 해제하거나 드롭을 삭제하여 다른 트랜잭션을 해제합니다.

sql_plus에서 KILL thread_id를 사용할 수 있습니다.


또 다른 재미있는 경험을 하게 되어 더 많은 정보를 추가하게 되었습니다.

Metadata데드락(dead lock)은 주어진 테이블에 대한 addl 작업 사이에 동일하게 발생할 수 있습니다(drop,alter...) 및 해당 테이블에 대한 선택 쿼리가 있습니다.

네.select.

그래서, 만약 당신이 mysql의 커서(또는 php, 예를 들어 다음과 같이) 위로 루프를 한다면,pdo::fetch), 그리고 동일한 테이블에서 addl 문을 실행하면 교착 상태가 발생합니다.

이 전형적인 시나리오의 한 가지 해결책은 다음과 같이 암묵적인 잠금을 해제하는 것입니다.commit선택한 문장을 완전히 가져온 후에 체계적으로 문장을 만듭니다.

MySQL을 다시 시작하는 것이 가장 좋은 해결책은 아닐 수도 있지만 저에게는 효과가 있었습니다.

sudo /etc/init.d/mysql restart
mysqladmin drop YOURDATABASE

언급URL : https://stackoverflow.com/questions/10871388/dropping-table-makes-mysql-hang

반응형