2012-03-20 31 views
25

http://dev.mysql.com/doc/refman/5.0/en/internal-locking.htmlMở khóa các bảng nếu chủ đề bị mất

Sau đây là phần trích từ tài liệu.

mysql> LOCK TABLES real_table WRITE, temp_table WRITE; 
mysql> INSERT INTO real_table SELECT * FROM temp_table; 
mysql> DELETE FROM temp_table; 
mysql> UNLOCK TABLES; 

Câu hỏi của tôi là nếu tôi sử dụng logic này trong mã shell script, và nếu các chủ đề bị mất (không giết) trước khi nó đạt đến "mở khóa bảng" tuyên bố, làm thế nào tôi sẽ biết rằng một số bảng bị khóa và làm cách nào để mở khóa bảng theo cách thủ công?

+0

Bạn có cân nhắc sử dụng giao dịch thay thế không? http://stackoverflow.com/questions/4226766/mysql-transactions-vs-locking-tables – GordonM

Trả lời

19

làm cách nào để biết rằng một số bảng bị khóa?

Bạn có thể sử dụng lệnh SHOW OPEN TABLES để xem các bảng bị khóa.

làm cách nào để mở khóa bảng theo cách thủ công?

Nếu bạn biết ID phiên bị khóa bảng - 'SELECT CONNECTION_ID()', thì bạn có thể chạy lệnh KILL để chấm dứt phiên và mở khóa bảng.

+2

nếu tôi không biết ID phiên và thiết bị đầu cuối đã khóa bảng không mở thì sao? – shantanuo

+2

Cố gắng đặt khoảng thời gian WAIT_TIMEOUT trước các bảng khóa (ví dụ: SET WAIT_TIMEOUT = 120;). Nó sẽ giúp tự động đóng kết nối đó sau khoảng thời gian được chỉ định. – Devart

76

Đây là những gì tôi để buộc mở khóa cho một số bảng bị khóa trong MySQL

1) Nhập MySQL

mysql -u your_user -p 

2) Chúng ta hãy xem danh sách các bảng khóa

mysql> show open tables where in_use>0; 

3) Hãy xem danh sách các quy trình hiện tại, một trong số đó đang khóa (các) bảng của bạn

mysql> show processlist; 

4) Hãy giết một trong những quá trình

mysql> kill put_process_id_here; 
+0

Rất hữu ích! Cảm ơn! –

+2

Bằng cách nào đó tôi đã quản lý để có được một bảng bị khóa, mà không có bất cứ điều gì được hiển thị trong processlist (bên cạnh kết nối ngủ) ... – Kevin

+1

Nếu quá trình của bạn là thiếu hoàn toàn nhưng bạn đang nhận được khiếu nại về bảng bị khóa: chỉ cần khởi động lại mysqld. Đối với tôi, đó là "dịch vụ mysqld khởi động lại" –

2

Với Sequel Pro:

Khởi động lại ứng dụng mở khóa bàn của tôi. Nó đặt lại kết nối phiên.

NOTE: I was doing this for a site on my local machine.

Các vấn đề liên quan