2012-06-03 7 views
15

Khi tôi cố gắng thả một bảng, MySQL bị treo. Tôi không có bất kỳ phiên mở nào khác. Làm thế nào để giải quyết điều này? Tôi đã đợi 10 giờ và quá trình này đã không chấm dứt.Rớt bảng làm cho MySQL treo

+1

xin vui lòng gửi kết quả của HIỂN THỊ ENGINE InnoDB TÌNH TRẠNG nếu cơ sở dữ liệu đang được InnoDB tất nhiên – Sebas

+0

trông giống như bảng bạn đang cố gắng thả đã được sử dụng (tốt, tôi có nghĩa là nó đã bị khóa bởi một số quá trình khác) và do đó nó chờ đợi cho quá trình cam kết. – Rahul

+0

Tôi đã thêm đầu ra nhật ký. –

Trả lời

12
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 

Nếu đây là bảng của bạn, xem this link

bạn có một bế tắc ngầm. Giết các giao dịch khác để thả thả hoặc hủy bỏ thả để giải phóng các giao dịch khác.

Bạn có thể sử dụng KILL thread_id, bằng sql_plus.


Tôi đang thêm thông tin từ khi tôi đưa ra một trải nghiệm thú vị khác.

Metadata ổ khóa chết có thể không kém xảy ra giữa một hoạt động DDL trên bàn nhất định (drop, alter ...) và một chọn truy vấn trên bảng đó.

Có, select. Vì vậy, nếu bạn lặp qua một con trỏ trong mysql (hoặc php, ví dụ với pdo::fetch), và bạn chạy một câu lệnh ddl trên cùng một bảng, bạn sẽ bị bế tắc.

Một giải pháp cho trường hợp không điển hình này là giải phóng các khóa ẩn bằng câu lệnh commit sau khi bất kỳ câu lệnh chọn nào được tìm nạp hoàn toàn.

+0

Tôi đã bỏ bảng, và bây giờ tôi không thể tạo một bảng mới khi tôi nhận được mã lỗi (28): không thể đồng bộ tập tin '..' vào đĩa. Tôi giả sử bằng cách thả bảng, tôi sẽ có nhiều không gian trống hơn. –

+0

tệp nào? Tôi nghĩ bạn nên khởi động lại máy chủ kể từ khi khóa kéo dài một thời gian dài. – Sebas

+1

khi tôi chạy một bảng tạo bảng thực sự lớn với nhiều cột tôi nhận được thông báo lỗi này. bằng cách khởi động lại máy chủ, bạn có nghĩa là thoát ra và kết nối lại? làm thế nào để bạn explicity khởi động lại máy chủ? –

12

Khởi động lại MySQL có thể không phải là giải pháp đẹp nhất nhưng nó làm việc cho tôi:

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

'mysql.server restart' hoạt động cho tôi. –