& ldquo; # 126 - Неверный файл ключа для таблицы '/tmp/#sql_5d9_0.MYI'; попробуйте отремонтировать его & rdquo; но у tmp, похоже, много свободного места [дубликат]

Не нужно передавать $ http в качестве параметра функции, так как вы уже ввели $ http в качестве зависимости от вашего контроллера. Я внесла некоторые изменения в код. Пожалуйста, проверьте, что это сработает для вас.

var gitHub = angular.module('gitHub', []);

gitHub.controller('mainController', ['$scope', '$http', function ($scope, $http) {

    $scope.user = '';

    $scope.getUserInfo = function() {
        $http.get('https://api.github.com/users')
            .success(function (result) {
                $scope.user = result;
                console.log(result);
            });
    };
    $scope.getUserInfo();
}]);
56
задан OMG Ponies 6 May 2011 в 00:24
поделиться

11 ответов

Иногда, когда эта ошибка происходит с временными таблицами:

#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it

Это может быть из-за нехватки места в папке /tmp. На некоторых установках Linux /tmp находится в своем собственном разделе и не имеет большого пространства - большие запросы MySQL будут заполнять его.

Вы можете использовать df -h, чтобы проверить, находится ли \tmp в его собственный раздел и сколько места выделяется для него.

Если он находится в своем собственном разделе и не хватает места, вы можете:

(a) изменить / tmp, чтобы его парирование имеет больший объем (либо перераспределением, либо перемещением его в главный раздел - например, см. здесь ) (b) изменение конфигурации MySql, так что он использует [temp folder] другой раздел, например /var/tmp

96
ответ дан codeulike 21 August 2018 в 18:33
поделиться
  • 1
    Мой результат df -h выглядит следующим образом: Размер файловой системы Используется Свободно Использовать% Установлено на / dev / sda 2.0G 1.3G 646M 67% / udev 490M 4.0K 490M 1% / dev tmpfs 200M 232K 199M 1% / run none 5.0M 0 5.0M 0% / run / lock none 498M 0 498M 0% / run / shm overflow 1.0M 0 1.0M 0% / tmp Поэтому я не уверен, что это означает, что tmp находится в переполнении 1MB или нет. В любом случае изменение my.cnf на использование / var / tmp, поскольку папка исправила эту проблему для меня. Насколько хорошо MySQL или Ubuntu справятся с этим, поскольку у меня были проблемы с дисковым пространством на моем текущем сервере? – M1ke 2 April 2013 в 15:18
  • 2
    Мне просто нужно было очистить место на жестком диске моего основного раздела, и эта ошибка исчезла. Спасибо за ребята. – fregas 3 May 2013 в 16:16
  • 3
    Вы можете использовать while true; do df -h /tmp; sleep 3; done во время запуска скрипта, чтобы увидеть, сколько места используется временными таблицами. – biniam_Ethiopia 5 November 2015 в 16:00
  • 4
    спасибо, это сработало – Harshal Patil 25 June 2018 в 07:34

Я испытываю ту же проблему.

Вот мое решение: 1. Не используйте «select *». Просто выберите поле, которое вам нужно. 2. Разделите запрос. Если выбранное вами поле слишком велико, результатом может быть разделение на какой-то запрос. Вы можете «array_merge ()» результат позже, если вы хотите, чтобы переменная, содержащая результат, не была изменена.

В моем случае я разбил запрос на 5 запросов, затем массив объединил его с помощью PHP.

Проблема лежит на сервере mysql. Это просто то, что разработчик приложений (такой, как я, я) не имеет преувеличения.

1
ответ дан Ahmad 21 August 2018 в 18:33
поделиться

У меня была эта проблема с запросом на таблицу с 500K + записями. Это давало мне тот же самый точный тип ошибки, указывающий на файл .MYI в каталоге / tmp, который редко присутствовал при проверке. Я уже увеличил размеры файлов кучи и временных файлов в файле /etc/my.cnf.

Проблема с запросом заключалась в том, что он действительно содержал предложение ORDER в конце, опустив его, он запустил запрос без ошибок. У него также был LIMIT. Я пытался посмотреть последние 5 записей в таблице. С включением предложения ORDER он задохнулся и дал ошибку.

Что происходит, так это то, что mysqld создавал внутреннюю временную таблицу со всеми записями из гигантской таблицы, чтобы применить ORDER.

Способ, которым я обходился, - применить дополнительное условие WHERE, ограничив записи с гигантской таблицы на какой-то меньший набор. Мне удобно иметь поле datetime для фильтрации.

Надеюсь, это поможет кому-то.

3
ответ дан ClickWhisperer 21 August 2018 в 18:33
поделиться

Вы можете найти, что работает «ANALYZE TABLE».

Мы столкнулись с этой проблемой, внезапно появившейся на большой таблице (~ 100M строк), и MySQL попыталась использовать / tmp для записи временной таблицы более 1 ГБ , который не удался, поскольку / tmp был ограничен ~ 600M.

Оказалось, что статистика таблицы InnoDB была довольно устаревшей. После запуска «ANALYZE TABLE ...» статистика была обновлена, и проблема была устранена. С более точной статистикой MySQL смог оптимизировать запрос правильно, и большой файл tmp больше не требовался.

Мы периодически запускаем «mysqlcheck -Aa», чтобы сохранить всю таблицу статистики свежей.

3
ответ дан Community 21 August 2018 в 18:33
поделиться

Проверьте доступное пространство MySQL tmpdir (/ tmp в вашем случае) во время выполнения запросов, поскольку он может съесть сотни МБ при работе с большими таблицами. Что-то вроде этого сработало для меня:

$ while true; do df -h /tmp; sleep .5; done
20
ответ дан Francesc Rosàs 21 August 2018 в 18:33
поделиться
  • 1
    Спасибо, это было то, что происходило со мной. Вы также можете сделать watch -n0.5 df -h /tmp – Sam 21 January 2013 в 13:04
  • 2
    Это сделало трюк - наблюдал, как несколько гигов съели голодный запрос. – Laizer 29 August 2013 в 03:15
  • 3
    Причиной этого сообщения об ошибке было отсутствие дискового пространства. – malhal 27 August 2014 в 21:46

указательные клавиши для одной из трех таблиц могут быть плохими, попробуйте запустить команду восстановления для всех 3 таблиц.

-1
ответ дан Gabriel Solomon 21 August 2018 в 18:33
поделиться

В Unix MySQL использует значение переменной среды TMPDIR как путь к каталогу, в котором хранятся временные файлы. Если TMPDIR не установлен, MySQL использует стандартную систему, которая обычно равна / tmp, / var / tmp или /usr/tmp.

. В Windows, Netware и OS2 MySQL проверяет порядок значений переменные среды TMPDIR, TEMP и TMP. Для первого найденного набора MySQL использует его и не проверяет оставшиеся. Если ни один из TMPDIR, TEMP или TMP не установлен, MySQL использует системную ОС Windows по умолчанию, обычно это C: \ windows \ temp.

Если файловая система, содержащая ваш временный каталог файлов, слишком мала, вы может использовать опцию -tmpdir для mysqld, чтобы указать каталог в файловой системе, где у вас достаточно места.

В MySQL 5.0 параметр -tmpdir может быть установлен в список из нескольких путей, которые используется в круговом стиле. Пути должны быть разделены символами двоеточия («:») на символах Unix и с запятой («;») на Windows, NetWare и OS / 2.

2
ответ дан Jaydeep Dave 21 August 2018 в 18:33
поделиться

Использование ключевого слова EXPLAIN может помочь выяснить, как наилучшим образом оптимизировать этот запрос. По сути, вам нужно как можно быстрее установить набор результатов как можно меньше. Если у вас есть результирующий набор из каждой строки в имени core_username до конца, когда вы его заказываете, вы рискуете ... этим.

Если вы можете сделать заказ только на core_username без проблем, вы может захотеть получить строку min () в качестве подзапроса.

-1
ответ дан Jon 21 August 2018 в 18:33
поделиться

У меня была аналогичная проблема. В моем случае проблема возникла из-за неправильного владельца / разрешения. Мне просто пришлось сменить владельца в моем каталоге данных на пользователя mysql, и это решило проблему.

0
ответ дан Lateef 21 August 2018 в 18:33
поделиться

запустите это

REPAIR TABLE `core_username`,`core_site`,`core_person`;

или выполните следующее:

select * from (
 SELECT * FROM `core_username`
 INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
 INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
 LIMIT 1)
ORDER BY `name` ASC
5
ответ дан Pentium10 21 August 2018 в 18:33
поделиться
  • 1
    Это не работает с временными таблицами (с которыми ОП сталкивается). – Mark E. Haase 11 April 2011 в 17:27
Другие вопросы по тегам:

Похожие вопросы: