Hết tài nguyên cho mysqldump


21

Tôi đang cố gắng thực hiện một mysqldump trên máy chủ Windows và tôi nhận được thông báo lỗi sau :

mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES

Đây là lệnh tôi đang chạy:

mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"

Khởi động lại dịch vụ mysql không giúp được gì.

Tôi luôn nhận được tin nhắn cho cùng một bảng.

Tôi đã thử giảm các biến table_cachemax_connections từ 64 xuống 32 và 30 xuống 10 nhưng tôi vẫn chỉ gặp lỗi lần này cho một bảng khác (và từ giờ trở đi, thông báo lỗi luôn đề cập đến bảng thứ hai).

Kịch bản tương tự đang chạy trên một tá máy chủ Windows khác có cùng cơ sở dữ liệu mà không gặp sự cố.

Tất cả các cơ sở dữ liệu có 85 bảng.


Bạn đang chạy hệ điều hành nào trên MySQL?
davey

Windows ở khắp mọi nơi.
Philippe Carriere

Có bao nhiêu bảng trong DB? Có vẻ như một số loại giới hạn mô tả tập tin.
khéo léo

85 bảng trong DB.
Philippe Carriere

Thông tin được thêm vào mô tả.
Philippe Carriere

Câu trả lời:


21

Theo đây - "Mã lỗi hệ điều hành 24: Quá nhiều tệp đang mở" sắp xếp với lỗi chung hơn 23 "Hết tài nguyên".

Vì vậy, có vẻ như bạn đang chạy ra khỏi xử lý tập tin. Đây thường là cài đặt / sự cố ở cuối máy chủ, trong MySQL hoặc trong chính HĐH.

Có lẽ kiểm tra / điều chỉnh --open-files-limitcài đặt trong chính MySQL và xem nếu điều đó có ích.

Ngoài ra, có lẽ hãy thử chạy kết xuất, trong khi không có ai khác đang sử dụng DB, với --single-transactioncài đặt thay vì --Lock-File, vì nhiều người đề nghị điều này sẽ hoạt động một bảng một lần thay vì mở tất cả chúng cùng một lúc (do đó sử dụng ít xử lý tệp hơn).

Ngoài ra, có lẽ bạn sẽ phải tìm ra nguyên nhân gốc rễ là tại sao máy chủ cụ thể này cạn kiệt tài nguyên. Điều này có thể liên quan đến việc khắc phục sự cố bằng cách vô hiệu hóa càng nhiều dịch vụ / quy trình càng tốt và xem liệu kết xuất có đi qua không. Sau đó, tìm ra thủ phạm là ăn quá nhiều tài nguyên và có lẽ không giải phóng chúng một cách chính xác.


2
--single-giao dịch thay vì --lock-bảng làm việc. Cảm ơn rất nhiều.
Philippe Carriere

Kỳ lạ là tôi không sử dụng InnoDB nhưng nó không hoạt động nếu không có tham số này. Tôi nghĩ rằng - giao dịch đơn lẻ chỉ liên quan đến innoDB.
Philippe Carriere

Tốt đẹp. :) Vui mừng vì nó đã giúp.
techie007

4
--lock-all-tablescũng hoạt động và không có vấn đề không nhất quán --single-transactionkhi làm việc trên các bảng không phải InnoDB.
freiheit

Chỉ cần làm rõ: --single-transactionlực lượng --lock-tables=off. Đừng sử dụng cái này trên các bảng không giao dịch.
b2ag

6

Bạn có ở vị trí để thử nó --single-transactionthay vì --lock-tablesví dụ: các bảng là InnoDB và bạn không sử dụng các bảng Cluster và ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE sẽ không xảy ra trong quá trình kết xuất? Tốt nhất xác nhận điều này là ổn với org hỗ trợ MySQL của bạn nếu bạn có.

Tôi chỉ thử điều này trên unix nhưng về cơ bản nếu tôi thử với DB với 2000 bảng thì không thành công với lỗi tương tự như của bạn, ví dụ như tôi đã sử dụng tất cả các thẻ xử lý tệp mở của mình.


+1. Giải pháp của bạn giống như techie007 cũng có hiệu quả nhưng anh ấy đã trả lời trước nên tôi chấp nhận câu trả lời của anh ấy. Đối với hồ sơ, tôi không sử dụng innoDB.
Philippe Carriere

2

Bạn có thể gặp lỗi này:

MySQL: Errcode: 24 khi sử dụng LOCK TABLES

... Cùng với các lỗi khác khi bạn nâng cấp lên MySQL 5.5 và bạn đang chạy các bản sao lưu của mình trên Plesk hoặc bất kỳ hệ điều hành nào khác mysqldump.

Sửa chữa:

  1. Chỉnh sửa my.cnf
  2. Thêm vào:

    open_files_limit=2048
    
  3. Khởi động lại MySQL

Nếu bạn đang nhận được:

Không thể tải từ mysql.proc. Bảng có thể bị hỏng (1548)

Đây là kết quả của việc nâng cấp lên 5.5. Thi hành:

mysql_upgrade --force

Đã thử nghiệm và làm việc trên CentOS 6.7 và Plesk 12.


0

Tôi đã có một vấn đề tương tự như Philipe. Khi tôi bắt đầu đổ, tôi thấy một lỗi như thế này:

mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES

Tôi đã sử dụng lệnh đơn giản:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

Vì vậy, tôi thêm một lệnh khác vào mysqldump của mình:

--single-transaction

và đổ đã sẵn sàng. Vì vậy, tất cả truy vấn mysqldump của tôi trông như thế này:

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql
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.