Công cụ lưu trữ không xác định / không được hỗ trợ: InnoDB | Ubuntu Ubuntu


45

Gần đây tôi đã nâng cấp từ Ubuntu LTS trước đây lên Chính xác và bây giờ mysql từ chối bắt đầu. Nó phàn nàn về những điều sau đây khi tôi cố gắng khởi động nó:

╰$ sudo service mysql restart
stop: Unknown instance:
start: Job failed to start

Và điều này hiển thị trong "/var/log/mysql/error.log":

120415 23:01:09 [Note] Plugin 'InnoDB' is disabled.
120415 23:01:09 [Note] Plugin 'FEDERATED' is disabled.
120415 23:01:09 [ERROR] Unknown/unsupported storage engine: InnoDB
120415 23:01:09 [ERROR] Aborting

120415 23:01:09 [Note] /usr/sbin/mysqld: Shutdown complete

Tôi đã kiểm tra quyền trên tất cả các thư mục mysql để đảm bảo rằng nó có quyền sở hữu và tôi cũng đã đổi tên các pre_ou ib_logs để nó có thể làm lại chúng. Tôi không nhận được vấn đề này ngay bây giờ, sau khi xem kết quả google trong 2 giờ.


Tình cờ, tôi đã có được mysql để chạy bằng cách bình luận ra mục "Skip_innodb" trong my.cnf. Nhưng tôi khá chắc chắn rằng tôi không nên giải quyết theo cách này.
Garrett

Vui lòng hiển thị tất cả các biến từ my.cnf là cài đặt innodb
RolandoMySQLDBA

Câu trả lời:


34

Sau khi kiểm tra nhật ký tôi thấy lỗi sau:

[ERROR] Unknown/unsupported storage engine: InnoDB

Tôi đã xóa các tệp này:

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1 

tại /var/lib/mysql

Điều này giải quyết vấn đề của tôi sau khi khởi động lại.


7
các rmlệnh được sử dụng để xóa bỏ những file chứ không phải đổi tên họ như xa như tôi biết ...
Itai Ganot

2
Những tệp này chứa dữ liệu thực tế cho cơ sở dữ liệu của bạn. Bạn không muốn xóa chúng.
Stefan Lasiewski

Không, ibdatatệp chứa dữ liệu (trừ khi bạn có tệp trên mỗi bảng). Các tệp ib_logfile là nhật ký phát lại có chứa dữ liệu cho các giao dịch thay đổi cơ sở dữ liệu có thể đang được xử lý khi / nếu cơ sở dữ liệu bị sập. Nếu bạn có thể tắt máy chủ thành công, việc xóa các tệp nhật ký này sẽ không làm hại bạn. Nếu nó bị hỏng, thì bạn cần chúng. Nhưng đây là một câu trả lời hợp lệ. Nếu tệp my.cnf của bạn thay đổi tùy chọn innodb_log_file_size và nó không còn phù hợp với hai tệp đó, bạn sẽ nhận được thông báo lỗi mà OP nêu. Xóa / di chuyển để những cái mới có thể được thực hiện sửa nó.
Safado

2
Tại sao các chỉnh sửa chỉ có thể được thực hiện trong 5 phút là ngoài tôi ... Tôi nên nói rằng đó là một sửa chữa tiềm năng cho lỗi đã đề cập ở trên. Theo tuyên bố của OP, đó không phải là bản sửa lỗi mà anh ta cần.
Safado

1
Bạn luôn có thể đổi tên chúng, vd mv ib_logfile0 ib_logfile0.bak && mv ib_logfile1 ib_logfile1.bak.
kenorb

23

Nếu bạn thực sự cần skip-innodb(trường hợp sử dụng: dấu chân bộ nhớ thấp), thì tất nhiên bạn không phải bình luận gì. Tuy nhiên, nếu InnoDB là công cụ lưu trữ mặc định, máy chủ sẽ không khởi động cho đến khi bạn cho nó biết công cụ lưu trữ nào sẽ sử dụng thay thế, ví dụ như default-storage-engine=myisamđối với MyISAM.

Vì vậy, hãy thử điều này:

$ sudo -u mysql mysqld --skip-innodb --default-storage-engine=myisam

6
Hãy thử thêm "default-Storage-engine = myisam" vào /etc/mysql/my.cnf trong phần [mysqld] nếu bạn muốn có "Skip_innodb".
pincoding

Hoạt động rất đẹp. Chúc mừng!
Boann

4
Điều gì nếu bạn muốn hỗ trợ innodb?
Nilzor

1
Mariadb trên Centos 7 được thêm default-storage-engine=myisamvào tập tin /etc/my.cnf bên dưới [mysqld]. Điều đó đã lừa Thx
Damodar Bashyal

12

Nếu bạn đang sử dụng MySQL 5.6+ và muốn tắt InnoDB, đừng quên " --default-tmp-Storage " hoặc nó sẽ không hoạt động:

Để tắt InnoDB, sử dụng --innodb = OFF hoặc --skip-innodb. Trong trường hợp này, vì công cụ lưu trữ mặc định là InnoDB, máy chủ sẽ không khởi động trừ khi bạn cũng sử dụng --default-Storage-engine và --default-tmp-Storage-engine để đặt mặc định cho một số công cụ khác cho cả vĩnh viễn và Bảng TẠM THỜI.

http://dev.mysql.com/doc/refman/5.6/en/innodb-parameter.html#option_mysqld_ignore-builtin-innodb

Bạn có thể thêm phần này vào my.cnf của bạn:

[mysqld] 
innodb=OFF 
ignore-builtin-innodb 
skip-innodb
default-storage-engine=myisam 
default-tmp-storage-engine=myisam

chỉ để đảm bảo nó sẽ hoạt động.


+1, Không bao giờ để ý tài liệu chính thức. nó nên thiết lập default-storage-enginedefault-tmp-storage-enginecảm ơn
Giberno

7

Kiểm tra nhật ký lỗi mysql của bạn.

tail -100 /var/log/mysql/error.log

Nếu nhật ký của bạn nói (như của tôi đã làm):

InnoDB: Đang khởi tạo nhóm bộ đệm, kích thước = 128.0M
InnoDB: mmap (137363456 byte) không thành công; sai 12
[ERROR] InnoDB: Không thể phân bổ bộ nhớ cho nhóm bộ đệm

Bạn không có đủ bộ nhớ để sử dụng kích thước bộ đệm mặc định là 128M

Chỉnh sửa tập tin cấu hình /etc/mysql/my.cnf thêm một dòng để chỉ định innodb_buffer_pool_size nhỏ hơn.

# make the buffer pool smaller than 128M since we only have 1 GB of total RAM
innodb_buffer_pool_size = 16M

Lưu tệp cấu hình và bắt đầu mysql

sudo service mysql start

Là tại chỗ trên đây. Nhưng cũng có thể là quá trình treo của máy chủ web hoặc thứ gì đó ngốn RAM, hãy kiểm tra xem, quá.
sjas

0

Hãy thử 2 điều nữa. 1. Hạ kích thước vùng đệm của innodb. 2. Chỉnh sửa tập lệnh ban đầu mysql và thêm tùy chọn --innodb.

Tôi cũng tự hỏi nếu gói của bạn là lỗi. Bạn có thể thử một phiên bản nhỏ khác nhau?

Ngoài ra, tôi giả sử máy chủ mysql của bạn cũng được nâng cấp? Có lẽ phiên bản đó bị hỏng? Chính xác vẫn chưa phải là cuối cùng.


Đã làm điều đó, không có hiệu lực.
Garrett

Xin lỗi, chỉnh sửa nó với một số thứ để thử, giống như một gói xấu. Cố gắng sử dụng phiên bản mysql.com hoặc percona thường ổn định hơn.
johnshen64

Cũng đảm bảo gói cũ được thanh lọc hoàn toàn, khi gói mới được cài đặt.
johnshen64

Sẽ thanh trừng các gói hoàn toàn dẫn đến mất thông tin cơ sở dữ liệu?
Garrett

Không nên, nhưng để an toàn, bạn nên luôn sao lưu DBS của mình.
johnshen64

0

Tôi đã gặp lỗi này khi tôi xóa vị trí tôi sử dụng tmpdir. Nếu gần đây bạn đã thay đổi tmpdir, bạn có thể muốn kiểm tra xem đó có phải là một vị trí có thể ghi, hợp lệ không.

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.