Bảng MySQL được đánh dấu là bị lỗi và lần sửa chữa cuối cùng (tự động?) Không thành công


126

Tôi đang sửa chữa bảng này thì đột nhiên máy chủ bị treo và khi tôi quay trở lại thì tất cả các bảng đều ổn nhưng bảng này hiển thị 'đang sử dụng' và khi tôi cố gắng sửa thì không tiến hành.

LRI 144 - Bảng './extas_d47727/xzclf_ads' được đánh dấu là bị hỏng và lần sửa chữa cuối cùng (tự động?) Không thành công

Tôi có thể làm gì để sửa chữa nó?


1
Tôi đã thấy điều này chủ yếu xảy ra khi hệ thống tập tin cơ bản hết các nút miễn phí. Kiểm tra với df -hi. Thông thường, một cái gì đó đang lấp đầy nó với vô số tệp nhỏ, ví dụ như các tệp phiên php không được dọn sạch.
Zrin

Câu trả lời:


260

Nếu quy trình MySQL của bạn đang chạy, hãy dừng nó. Trên Debian:

sudo service mysql stop

Chuyển đến thư mục dữ liệu của bạn. Trên Debian:

cd /var/lib/mysql/$DATABASE_NAME

Hãy thử chạy:

myisamchk -r $TABLE_NAME

Nếu điều đó không hiệu quả, bạn có thể thử:

myisamchk -r -v -f $TABLE_NAME

Bạn có thể bắt đầu lại máy chủ MySQL của mình. Trên Debian:

sudo service mysql start

3
Tôi đã thử lệnh trên Tôi gặp lỗi này Không thể tạo tempfile mới: 'xzclf_ads.TMD'
CryptoMiningPoolsetupYiimp

2
Vâng, đĩa có thực sự đầy? Bạn có thể thử chạy "df -h" không? Rất có thể là như vậy và bạn nên giải phóng một số dung lượng ... Trong quá trình sửa chữa bảng, nó sử dụng một số dung lượng đĩa để ghi vào bảng tạm thời. Như bạn có thể thấy từ thông báo lỗi, nó ghi vào thư mục / tmp / của bạn
Aleksandar Vucetic

13
Tôi phải điều hướng đến /var/lib/mysql/<database>và chạy myisamchk -r -v -f ./<table name>.
Linus Oleander

5
Tôi đã có một myisam_sort_buffer_size is too smalllỗi, vì vậy lệnh này đã làm việc cho tôi:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Wow, tôi nghĩ rằng toàn bộ trang web của tôi đã hosed. Như một sửa chữa đơn giản. Bạn là người hùng của tôi!
Anthony

105

Hãy thử chạy truy vấn sau:

repair table <table_name>;

Tôi đã có cùng một vấn đề và nó đã giải quyết cho tôi vấn đề.


Đây là một sửa chữa nhanh chóng! Có một bảng tùy chọn "xấu". Hãy chắc chắn rằng bạn chọn cơ sở dữ liệu chính xác đầu tiên!
jyllstuart

12

Nếu nó cho phép bạn từ chối trong khi di chuyển đến / var / lib / mysql thì hãy sử dụng giải pháp sau

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

Tôi cần thêm USE_FRM vào câu lệnh sửa chữa để làm cho nó hoạt động.

REPAIR TABLE <table_name> USE_FRM;

3

Tôi đã nhận myisamchk: error: myisam_sort_buffer_size is too smalllỗi.

Giải pháp

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

Đi đến data_dirvà loại bỏ các Your_table.TMPtập tin sau khi sửa chữa <Your_table>bảng.


Ở đâu data_dir ?
CMCDragonkai

1
tìm kiếm nó bằng lệnh này grep -r datadir /etc/mysql/. Nên /var/lib/mysqldưới debian và ubfox.
ThorstenS

1

Đây là một giải pháp 100%. Tôi đã thử nó bản thân mình.

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

Tôi đã thử các tùy chọn trong các câu trả lời hiện có, chủ yếu là câu trả lời đúng mà không hoạt động trong kịch bản của tôi. Tuy nhiên, những gì đã làm việc là sử dụng phpMyAdmin. Chọn cơ sở dữ liệu và sau đó chọn bảng, từ menu thả xuống dưới cùng chọn "Bảng sửa chữa".

  • Loại máy chủ: MySQL
  • Phiên bản máy chủ: 5.7.23 - Máy chủ cộng đồng MySQL (GPL)
  • phpMyAdmin: Thông tin phiên bản: 4.7.7
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.