Таблиця MySQL позначена як збій, а останній (автоматичний?) Ремонт не вдався


126

Я ремонтував цю таблицю, раптом сервер повісився, і коли я повернувся назад, усі таблиці в порядку, але ця відображається "у використанні", і коли я намагаюся відремонтувати, це не продовжується.

ПОМИЛКА 144 - Таблиця './extas_d47727/xzclf_ads' позначена як збій, а останній (автоматичний?) Ремонт не вдався

Що я можу зробити, щоб його відремонтувати?


1
Я бачив, що це в основному відбувається, коли основна файлова система виходить із вільних входів. Зверніться до df -hi. Зазвичай щось заповнює його навантаженням невеликих файлів, наприклад, файли сеансу PHP, які не очищаються.
Зрін

Відповіді:


260

Якщо ваш MySQL процес запущений, зупиніть його. На Debian:

sudo service mysql stop

Перейдіть до папки даних. На Debian:

cd /var/lib/mysql/$DATABASE_NAME

Спробуйте запустити:

myisamchk -r $TABLE_NAME

Якщо це не працює, ви можете спробувати:

myisamchk -r -v -f $TABLE_NAME

Ви можете запустити MySQL-сервер заново. На Debian:

sudo service mysql start

3
Я спробував вище команду, я отримую цю помилку Не вдається створити новий tempfile: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Ну, чи диск справді повний? Чи можете ви спробувати запустити "df -h"? Швидше за все, це так, і ви повинні звільнити трохи місця ... Під час ремонту таблиці він використовує деякий простір на диску для запису до тимчасової таблиці. Як видно з повідомлення про помилку, воно пише в / tmp / папку
Aleksandar Vucetic

13
Мені довелося орієнтуватися /var/lib/mysql/<database>і бігати myisamchk -r -v -f ./<table name>.
Лінус Олеандр

5
У мене виникла myisam_sort_buffer_size is too smallпомилка, тому ця команда працювала для мене:myisamchk -r -v --sort_buffer_size=2G <table_name>
dusan

1
Нічого собі, я думав, що весь мій веб-сайт був шланговим. Таке просте виправлення. Ви - мій герой!
Ентоні

105

Спробуйте запустити такий запит:

repair table <table_name>;

У мене було те саме питання, і це вирішило мені проблему.


Це було швидко виправити! Мав таблицю "поганих" варіантів. Переконайтесь, що ви обрали спочатку правильну базу даних!
jyllstuart

12

Якщо він дає вам відмову в дозволі під час переходу до / var / lib / mysql, тоді використовуйте наступне рішення

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

4

Мені потрібно було додати USE_FRM до заяви про ремонт, щоб він працював.

REPAIR TABLE <table_name> USE_FRM;

3

Я отримав myisamchk: error: myisam_sort_buffer_size is too smallяк помилку.

Рішення

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

2

Перейдіть до data_dirта вийміть Your_table.TMPфайл після ремонту <Your_table>таблиці.


Де data_dir?
CMCDragonkai

1
шукайте його за допомогою цієї команди grep -r datadir /etc/mysql/. Має бути /var/lib/mysqlпід debian та ubuntu.
ТорстенС

1

Це 100% розчин. Я сам спробував це.

myisamchk -r -v -f --sort_buffer_size = 128М --key_buffer_size = 128М / var / lib / mysql / ім'я бази даних / табло


0

Я спробував варіанти в існуючих відповідях, в основному той, який вказав правильний, який не працював у моєму сценарії. Однак для роботи було використання phpMyAdmin. Виберіть базу даних, а потім виберіть таблицю, у нижньому спадному меню виберіть «Ремонт таблиці».

  • Тип сервера: MySQL
  • Версія сервера: 5.7.23 - Сервер спільноти MySQL (GPL)
  • phpMyAdmin: Інформація про версію: 4.7.7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.