2012-07-09 31 views
9

Tôi có bảng trong mysql với công cụ lưu trữ MyISAM. Tôi muốn tạo phân vùng trên một bảng cụ thể, cho điều này tôi đang thực hiện truy vấn -# 1016 - Không thể mở tệp: './database_name/#sql-38f_36aa.frm' (errno: 24)

alter table Stops PARTITION BY KEY(`stop_id`) PARTITIONS 200 

đâu stop_id 'là loại varchar. Trong khi thực hiện truy vấn trên, tôi gặp lỗi -

#1016 - Can't open file: './database_name/#sql-38f_36aa.frm' (errno: 24) 

Ai cũng có thể giúp tôi giải quyết vấn đề này?

Cảm ơn bạn.

Trả lời

17

Từ herehere.

errno: 24 có nghĩa là quá nhiều tệp được mở cho quy trình đã cho. Có một biến chỉ đọc mysql gọi là 'open_files_limit' rằng sẽ thấy có bao nhiêu file mở được phép bởi mysqld:

SHOW VARIABLES LIKE 'open%'; 

Một hệ thống nhiều thiết lập này để một cái gì đó rất thấp, như 1024. Thật không may, sau đây sẽ KHÔNG làm việc:

SET open_files_limit = 100000

MySQL sẽ phản ứng với:

ERROR 1238 (HY000): Biến open_files_limit' 'chỉ đọc biến số

Tuy nhiên, bạn có thể thay đổi thành /etc/my.cnf. Tệp này có thể không tồn tại, nếu không, chỉ cần tạo nó. Hãy chắc chắn nó có nội dung sau:

[mysqld]

open-files-limit = 100000 

Sau đó, hãy chắc chắn để khởi động lại mysql:

sudo /etc/init.d/mysql restart

Bây giờ , HIỂN THỊ VARIABLES LIKE 'open%' sẽ hiển thị 100000. Số bạn việc sử dụng có thể khác nhau.

+0

Cảm ơn Jacob, nó giúp tôi rất nhiều – Deepu

+2

Lưu ý, đối với Debian, tệp được đặt tại '/ etc/mysql/my.cnf' và biến' open_files_limit' không có ở đó. Chỉ cần thêm nó bên dưới phần '[mysqld]'. – Mike

+0

Tương tự với Ubuntu 12.04 LTS của tôi. Tệp nằm trong '/ etc/mysql/my.cnf' và' open_files_limit' không có ở đó. –

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