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" → операции → восстановить (всего лишь один клик) эффект может занять некоторое время, чтобы применить