MySQL liên tục gặp sự cố: InnoDB: Không thể khóa ./ibdata1, lỗi: 11


43

Tôi có một máy chủ web đơn giản (Debian 6.0 x86, DirectAdmin với bộ nhớ 1 GB và vẫn còn 10 GB dung lượng trống, mySQl phiên bản 5.5.9), tuy nhiên máy chủ myQuery vẫn bị sập và tôi cần phải giết tất cả các quy trình myQuery để có thể khởi động lại nó lần nữa.

/var/log/mysql-error.log đầu ra:

130210 21:04:26 InnoDB: Using Linux native AIO
130210 21:04:34 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:05:42 InnoDB: Completed initialization of buffer pool
130210 21:05:48 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:22 InnoDB: Initializing buffer pool, size = 128.0M
130210 21:06:27 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:06:29 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:07:22 InnoDB: Completed initialization of buffer pool
130210 21:07:51 mysqld_safe mysqld from pid file /usr/local/mysql/data/website.pid ended
130210 21:08:33 InnoDB: Completed initialization of buffer pool
130210 21:12:03 [Note] Plugin 'FEDERATED' is disabled.
130210 21:12:47 InnoDB: The InnoDB memory heap is disabled
130210 21:12:47 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
130210 21:12:47 InnoDB: Compressed tables use zlib 1.2.3
130210 21:12:47 InnoDB: Using Linux native AIO
130210 21:13:11 InnoDB: highest supported file format is Barracuda.
130210 21:13:23 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130210 21:14:05  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
130210 21:17:53  InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
130210 21:17:53  InnoDB: Operating system error number 11 in a file operation.

Tôi đã tìm thấy một chủ đề trên trang web myQuery ở đây tuy nhiên không có giải pháp nào cho nó.

Có ai có ý kiến ​​gì không?


Và đây là phiên bản nào của MySQL?
Michael Hampton

Tôi không hiểu - phần này của tệp nhật ký nói về vấn đề với MySQL bắt đầu không phải do nguyên nhân lỗi. Điều tốt nhất là loại bỏ nguồn của vấn đề.
Krzysztof Księżyk

@MichaelHampton Bài đăng đã được chỉnh sửa (phiên bản myQuery 5.5.9 và tăng nhật ký).
Devator

1
Bạn có kiểm tra rằng không có mysqld chạy trước khi bắt đầu không? Làm sao?
symcbean

Câu trả lời:


32

một cách tiếp cận khác từ một bình luận trong cùng một blog:

điều này đã giúp tôi:

lsof -i: 3306

Sau đó giết nó (số tiến trình)

giết -9 QUY TRÌNH

ví dụ: giết -9 13498

Sau đó thử khởi động lại MySQL một lần nữa.

thông qua http://www.webhostingtalk.com/archive/index.php/t-1070293.html


1
service mysql restartđã cho thấy không có quá trình chạy nào, nhưng lsoftìm thấy nó. Giết nó, service mysql startvà bây giờ lũ quá trình email thất bại có thể dừng lại. Cảm ơn nhiều.
Doyle Lewis

28

với Ubuntu 14.04. Tôi đang gặp vấn đề này khi tôi cố gắng khởi động lại thông qua

/etc/init.d/mysql restart

Thay vào đó hãy thử

service mysql restart 

1
Cảm ơn, nó đã giúp. Nhưng tại sao?
quá

1
@too askubfox.com/questions/2075/ Lần
mloskot

@too, nếu bạn có cả tập lệnh init.d kiểu cũ cấu hình khởi động cho một công việc, bạn phải sử dụng service job start, nếu không, nếu bạn bắt đầu với tập lệnh init.d, Upstart sẽ không biết về nó và nó có thể thử để khởi động một thể hiện khác. (Ít nhất đó là trường hợp với các tập lệnh init mặc định của MySQL.)
wireman

@wireman: điều đó giải thích tại sao các gói khác bao gồm cả nút (máy chủ DNS) có vấn đề tương tự. Khi họ quyết định thi hành nó? Tôi nghĩ /etc/init.d là tốt hơn vì nó cho phép hoàn thành shell do đó giúp người dùng không phải gõ quá nhiều. Tiến tới sức mạnh của -1 :)
quá

Hoàn thành tab @too Bash là tùy chỉnh. Không có bất cứ thứ gì tiện dụng cho Ubuntu, nhưng có vẻ kỳ lạ là không ai có thể nghĩ ra các servicetên hoàn thành tab . Có thể gửi yêu cầu tính năng cho Canonical thông qua trình theo dõi lỗi của họ?
một CVn

18

Nguyên nhân phổ biến nhất của vấn đề này là cố gắng khởi động MySQL khi nó đang chạy.

Để giải quyết nó, hãy loại bỏ mọi phiên bản đang chạy của MySQL và sau đó khởi động lại nó bằng các tập lệnh khởi động bình thường của bạn, vd service mysql start.

Đừng cố khởi động MySQL thủ công khi sử dụng các phiên bản đóng gói phân phối trừ khi bạn chuẩn bị cho một thế giới bị tổn thương.


however the mySQL server keeps crashing- Tôi không khởi động lại myQuery. Nó chỉ gặp sự cố, sau đó tôi cần phải khởi động lại nó rõ ràng. ;-)
Người sùng đạo

@MichaelHampton bạn có thể cung cấp thêm thông tin về 'thế giới bị tổn thương' và 'bắt đầu MySQL thủ công' không? Cảm ơn)
Serge Kvashnin

11

Giải pháp

tạo một bản sao của các tệp gốc (ibdata1, ib_logfile0, ib_logfile1 ...).

mv ibdata1 ibdata1.bak 
cp -a ibdata1.bak ibdata1

http://cglreport.zhenhua.info/2008/08/mysql-error-unable-to-lock-ibdata1.html


kỳ diệu đã giúp tôi.
nils petersohn

Điểm của cp -a là gì?, tôi đã đọc trang người đàn ông
Ilja

2
Rất cám ơn, nó đã giúp. Nhưng tại sao?
DaviAragao

Tôi đã gặp vấn đề này sau khi khởi động lại thất bại trên db chạy trong bộ chứa docker. Tôi đang đưa ra một phỏng đoán có giáo dục về lý do tại sao điều này hoạt động và đó là một số dữ liệu meta được lưu trữ trong tệp. di chuyển nó và sao chép nó vào vị trí ban đầu sẽ loại bỏ siêu dữ liệu xác định nó bị khóa. Hoạt động -a duy trì các thuộc tính tệp, bao gồm các thuộc tính liên quan đến SELinux, nhưng không phải là siêu dữ liệu, trong quá trình sao chép.
JDL

2

Điều này giúp tôi giải quyết nó:

Xóa tất cả các tệp ibdata và để mysql tạo chúng.

dừng mysql:

service mysql stop

đi đến thư viện mysql:

cd /var/lib/mysql/

di chuyển các tập tin innodb ở đâu đó trong trường hợp bạn cần nó:

mv ib* /root/

bắt đầu mysql:

service mysql start

Cuộn qua các câu trả lời hữu ích tôi nghĩ chắc chắn điều này có vẻ như nó sẽ hoạt động vì lỗi đang phàn nàn về việc không thể khóa tệp đó. Sau khi di chuyển, mysql đã tạo lại chúng nhưng vẫn phàn nàn ... điên rồ!
Kyle Burkett

1

Đã đến đây từ việc googling của cùng một lỗi lặp lại nhưng với mã lỗi 13 ( InnoDB: Unable to lock ./ibdata1, error: 13). Sau khi thử rất nhiều giải pháp trên internet, đã phát minh ra một giải pháp giúp tôi (apparmor!)

Thêm các dòng này vào cấu hình /etc/apparmor.d/usr.sbin.mysqld(và tải lại apparmor và mysql tất nhiên):

/path/to/mysql/data/ r,
/path/to/mysql/data/** rwk,

Sự khác biệt chính giữa các giải pháp thường gặp: hai quy tắc (cho chính dir và cho tất cả các tệp bên trong, lưu ý gấp đôi **) và ktùy chọn cho phép mysql khóa các tệp.

Hy vọng điều này sẽ giúp ai đó.


Bạn cũng có thể thêm nó vào /etc/apparmor.d/local/usr.sbin.mysqld. Tạo tập tin nếu nó không tồn tại. Để biết thêm chi tiết, vui lòng xem/etc/apparmor.d/local/README
knb


0

Vui lòng kiểm tra xem bạn có pid-filetham số trong [mysql]phần của my.cnftập tin. Nếu nó không có mặt, unable to lock ...ibdata1.. error:1sẽ xảy ra.


0

Đơn giản, nhưng nhanh hơn so với cách "cp -a". Và đã giúp khi "cp -a" và mọi thứ khác không thể.

  1. service mysql stop && pkill -f mysql

Loại bỏ tất cả các quy trình mysql

  1. vi /etc/mysql/my.cnf

Thay đổi tham số datadir = / var / lib / mysql thành datadir = / var / lib / mysql2 (hoặc chỉ thêm nếu bạn không có)

  1. mv /var/lib/mysql /var/lib/mysql2

Đổi tên datadir thành một tên mới

  1. service mysql start

Chuẩn bị tambourine của bạn


0

Nếu không có giải pháp nào khác hoạt động, vấn đề có thể bắt nguồn từ cấu hình sai của AppArmor.

Vì vậy, chỉ cần làm:

$ apt install apparmor-profiles

và sau đó khởi động lại MySQL (chú ý tốc độ khởi động lại của nó).

Tôi nhận thấy một tệp bị thiếu liên quan đến AppArmor khi thực hiện:

$ systemctl status mysql.service

Do đó, tại sao tôi nghĩ có gì đó không ổn với cấu hình của AppArmor.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.