Ответ 1
Сделайте следующие шаги
Остановить службу mysql
переименуйте файл .myi в x.old
Запустите mysql
REPAIR все таблицы в запросе, MySQL перестроит ключевой файл
Я написал запрос, и это выполняется на моем локальном сервере правильно, у него меньше данных,
но когда я запускаю его на сервере, он получает ошибку - (у этого больше данных около 6 ГБ)
Incorrect key file for table '/tmp/#sql_3c51_0.MYI'; try to repair it
Вот мой запрос
SELECT
`j25_virtuemart_products`.`virtuemart_product_id`,
`product_name`,
`product_unit`,
`product_s_desc`,
`file_url_thumb`,
`virtuemart_custom_id`,
`custom_value`
FROM
`j25_virtuemart_product_customfields`,
`j25_virtuemart_products`,
`j25_virtuemart_products_en_gb`,
`j25_virtuemart_product_medias`,
`j25_virtuemart_medias`
WHERE
(
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_products_en_gb`.`virtuemart_product_id`
AND
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_product_customfields`.`virtuemart_product_id`)
AND
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_product_medias`.`virtuemart_product_id`
AND
`j25_virtuemart_product_medias`.`virtuemart_media_id`=`j25_virtuemart_medias`.`virtuemart_media_id`
GROUP BY `j25_virtuemart_products`.`virtuemart_product_id`
LIMIT 0, 1000;
Кто-нибудь знает, как восстановить эту ошибку - что-то вроде оцимизации этого запроса или любым другим способом спасибо
Сделайте следующие шаги
Остановить службу mysql
переименуйте файл .myi в x.old
Запустите mysql
REPAIR все таблицы в запросе, MySQL перестроит ключевой файл
Проблема вызвана нехваткой места на диске в папке /tmp. Том /tmp используется в запросах, требующих создания временных таблиц. Эти временные таблицы имеют формат MyISAM, даже если в запросе используются только таблицы с InnoDB.
Вот несколько решений:
TMPDIR
среды TMPDIR
перед запуском mysqld. Укажите TMPDIR
на папку на томе диска, на которой больше свободного места. Вы также можете использовать опцию tmpdir
в /etc/my.cnf
или --tmpdir
в командной строке службы mysqld. См.: B.5.3.5 Где MySQL хранит временные файлыТак много ответов выше, и владелец вопроса уже получил решение, предложенное @Hawili, и прошло много времени с тех пор, как эта проблема была поднята. Но поскольку это общая проблема, я хотел поделиться своим опытом, чтобы, если кто-то снова получил эту проблему из-за разных причин, тогда можно получить решение отсюда.
Случай 1:
Наиболее распространенная причина заключается в том, что запрос извлекает данные, превышающие размер вашего раздела /tmp. Всякий раз, когда вы получаете эту проблему во время запроса, просмотрите размер папки /tmp. Временные таблицы создаются и удаляются автоматически, и если доступное пространство здесь уменьшается до 0 во время этого запроса, это означает, что вам нужно оптимизировать ваш запрос или увеличить размер раздела /tmp.
Примечание. Иногда это не отдельный запрос: если комбинация тяжелых запросов делает это одновременно на одном сервере, вы можете получить эту проблему, где обычно отдельные запросы будут выполняться без каких-либо ошибок.
Случай 2:
В случае поврежденной таблицы myisam, где вам нужно восстановить, путь к каталогу будет отличаться от /tmp в сообщении об ошибке.
Случай 3: (редкий случай)
Иногда из-за неправильного соединения в таблицу вы можете получить эту ошибку. Это actaully синтаксическая ошибка, но mysql может выбросить эту ошибку. Вы можете проверить информацию здесь по ссылке ниже -
Неверный файл ключа для таблицы '/tmp/#sql_18b4_0.MYI'; попробуйте отремонтировать его
Проверьте расположение вашего tmp-диска, запустив df -h
. Удостоверьтесь, что достаточно места для создания временного файла, это может быть несколько концертов.
Изменить: если у вас достаточно свободного места, я бы проверил, чтобы каждый индексируемый или включенный в предложение WHERE индексированный индекс индексировался.
Проверьте сервер базы данных, на котором у вас достаточно свободного места на диске. Если диски заполнены, эта ошибка отображается. Теперь, какие папки вы должны посмотреть на это, зависит от вашей настройки.
Я использовал эту следующую команду, и ошибка исчезла:
mysqlcheck --all-databases -r #repair
Я получил это решение из cpanel forum
Та же проблема для меня
Запустите df -h
чтобы увидеть, достаточно ли места в вашем разделе /tmp
В моем случае /tmp была файловой системой переполнения:
overflow 1,0M 24K 1000K 3%/tmp
Что случилось:
У меня возникли некоторые проблемы, и мой раздел /
был переполнен, затем дистрибутив Debian создал новый раздел /tmp
в памяти RAM, чтобы использовать его временно. Этот раздел /tmp
1 МБ недостаточно велик для использования системой.
Решение: выполните следующую команду, чтобы удалить этот временно созданный раздел /tmp
sudo umount -l/tmp
Перезапустите службу MySQL с помощью этой командной строки /etc/init.d/mysqld restart
в терминале.