MySQL, ошибка 126: неправильный файл ключа для таблицы

Я прочитал следующий вопрос, который имеет актуальность, но ответы не удовлетворили меня: MySQL: # 126 - Неверный ключевой файл для таблицы


Проблема

При запуске запроса я получаю эту ошибку

ОШИБКА 126 (HY000): неправильный файл ключа для таблицы

Вопрос

Когда я пытаюсь найти проблему, я не могу ее найти, поэтому я не знаю, как ее исправить с помощью команды восстановления. Есть ли какие-либо указания на то, как я могу найти проблему, вызывающую эту проблему каким-либо другим способом, но я уже пробовал?


Запрос

mysql>       SELECT
    ->         Process.processId,
    ->         Domain.id AS domainId,
    ->         Domain.host,
    ->         Process.started,
    ->         COUNT(DISTINCT Joppli.id) AS countedObjects,
    ->         COUNT(DISTINCT Page.id)   AS countedPages,
    ->         COUNT(DISTINCT Rule.id)   AS countedRules
    ->       FROM Domain
    ->         JOIN CustomScrapingRule
    ->           AS Rule
    ->           ON Rule.Domain_id = Domain.id
    ->           LEFT JOIN StructuredData_Joppli
    ->             AS Joppli
    ->             ON Joppli.CustomScrapingRule_id = Rule.id
    ->         LEFT JOIN Domain_Page
    ->           AS Page
    ->           ON Page.Domain_id = Domain.id
    ->         LEFT JOIN Domain_Process
    ->           AS Process
    ->           ON Process.Domain_id = Domain.id
    ->       WHERE Rule.CustomScrapingRule_id IS NULL
    ->       GROUP BY Domain.id
    ->       ORDER BY Domain.host;
ERROR 126 (HY000): Incorrect key file for table '/tmp/#sql_2b5_4.MYI'; try to repair it

mysqlcheck

[email protected]:~# mysqlcheck -p scraper
Enter password: 
scraper.CustomScrapingRule                         OK
scraper.Domain                                     OK
scraper.Domain_Page                                OK
scraper.Domain_Page_Rank                           OK
scraper.Domain_Process                             OK
scraper.Log                                        OK
scraper.StructuredData_Joppli                      OK
scraper.StructuredData_Joppli_Product              OK

подсчитанные строки

mysql> select count(*) from CustomScrapingRule;
+----------+
| count(*) |
+----------+
|       26 |
+----------+
1 row in set (0.04 sec)

mysql> select count(*) from Domain;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) from Domain_Page;
+----------+
| count(*) |
+----------+
|   134288 |
+----------+
1 row in set (0.17 sec)

mysql> select count(*) from Domain_Page_Rank;
+----------+
| count(*) |
+----------+
|  4671111 |
+----------+
1 row in set (11.69 sec)

mysql> select count(*) from Domain_Process;
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.02 sec)

mysql> select count(*) from Log;
+----------+
| count(*) |
+----------+
|       41 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from StructuredData_Joppli;
+----------+
| count(*) |
+----------+
|    11433 |
+----------+
1 row in set (0.16 sec)

mysql> select count(*) from StructuredData_Joppli_Product;
+----------+
| count(*) |
+----------+
|   130784 |
+----------+
1 row in set (0.20 sec)

Update


Использование диска

[email protected]:/tmp# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       20G  4.7G   15G  26% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            237M  4.0K  237M   1% /dev
tmpfs            49M  188K   49M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            245M     0  245M   0% /run/shm
none            100M     0  100M   0% /run/user

Ответ 1

Похоже, что ваш запрос возвращает большой промежуточный результат, требующий создание временной таблицы и что настроенное местоположение для временного mysql дисковые таблицы (/tmp) недостаточно велики для результирующей временной таблицы.

Вы можете попытаться увеличить размер раздела tmpfs, перемонтировав его:

mount -t tmpfs -o remount,size=1G tmpfs /tmp

Вы можете сделать это изменение постоянным, отредактировав /etc/fstab

Если вы не можете этого сделать, вы можете попробовать изменить расположение диска временных таблиц, отредактировав запись "tmpdir" в файле my.cnf(или добавьте если он еще не существует). Помните, что каталог, который вы выберите должен быть доступен для записи пользователем mysql

Вы также можете попытаться предотвратить создание временной таблицы на диске путем увеличения значения для параметров конфигурации mysql:

tmp_table_size
max_heap_table_size

до больших значений. Вам нужно будет увеличить оба указанных параметра

Пример:

set global tmp_table_size = 1G;
set global max_heap_table_size = 1G;

Ответ 2

Разбить сложный запрос на несколько из них будет быстрее, не увеличивая размер таблицы temp

Ответ 3

В моем случае я просто удалил временные файлы temp:

my.ini

tmpdir = "D:/xampp/tmp"

И это сработало для меня.

Ответ 4

Если ваше монтирование /tmp в файловой системе Linux установлено как переполнение, часто размер которого равен 1 МБ, т.е.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            7.9G   12K  7.9G   1% /dev
tmpfs           1.6G  348K  1.6G   1% /run
/dev/xvda1      493G  6.9G  466G   2% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            7.9G     0  7.9G   0% /run/shm
none            100M     0  100M   0% /run/user
overflow        1.0M  4.0K 1020K   1% /tmp               <------

это, вероятно, связано с тем, что вы не указали /tmp как свой собственный раздел, а ваша корневая файловая система была заполнена, а /tmp была повторно установлена ​​в качестве резервной копии.

Я столкнулся с этой проблемой после того, как закончил свободное пространство на томе EC2. Как только я изменил размер тома, я столкнулся с разделом переполнения /tmp, заполняя при выполнении сложного представления.


Чтобы исправить это после того, как вы очистили пространство/размер, просто отключите резервную копию и он должен вернуться в исходную точку (обычно ваш корневой раздел):
sudo umount -l /tmp

Примечание. -l будет лениво размонтировать диск.Суб >

Ответ 5

Вам просто нужно восстановить таблицу, которая используется в поисковом запросе. эта проблема обычно возникает в поисковом запросе.

перейти к " table_name" → операции восстановить (всего лишь один клик) эффект может занять некоторое время, чтобы применить