Mysql ОШИБКА 1005 (HY000): Невозможно создать таблицу 'tmp' (номер ошибки: 13) - PullRequest
14 голосов
/ 19 марта 2010

Я запускаю Mysql на Ubuntu 9.10, процесс Mysql выполняется от имени пользователя root, я использую учетную запись root при входе в Mysql, которой я дал все привилегии, я использую свою собственную базу данных (не mysql), я могу создать таблицу, но когда я пытаюсь создать Временная таблица, я получаю эту ошибку:

ОШИБКА 1005 (HY000): невозможно создать таблицу 'tmp' (номер ошибки: 13)

Для этого запроса:

CREATE TEMPORARY TABLE tmp (id int);

На моем жестком диске достаточно места, все разрешения предоставлены (также у var / lib / mysql есть разрешения mysql).

Есть идеи? Спасибо, Коби

Ответы [ 7 ]

30 голосов
/ 27 октября 2010

У меня была такая же проблема пару недель назад. Папка базы данных в файловой системе принадлежала не тому пользователю. Простой chown -R mysql:mysql /var/lib/mysql/database_name сделал свое дело!

Здесь все объяснено: http://www.dinosources.eu/2010/10/mysql-cant-create-table (по-итальянски, но понятно)

Приветствия

4 голосов
/ 19 марта 2010

Ну ... в /etc/mysql/my.cnf есть папка "tmp" для использования, которая по умолчанию / tmp (от root) .. и не имеет привилегий mysql. chmod 0777 / tmp добьется цели

2 голосов
/ 24 мая 2012

У меня была ошибка выше с правильными разрешениями на / tmp, корректным контекстом и достаточным местом на диске в Fedora 16.

После дня срыва волос я отследил проблему до настройки в конфигурации systemd для службы MySQL.

В /etc/systemd/system/multi-user.target.wants/mysqld.service проверьте, есть ли настройка PrivateTmp=true. Это изменение вынуждает MySQL использовать подкаталог / tmp / systemd-namespace-XXXXX вместо помещения файлов непосредственно в / tmp. Очевидно, MySQL это не нравится, и он завершается с ошибкой отказа в разрешении (13) для любого запроса, требующего создания временного файла.

Вы можете изменить этот параметр следующим образом:

cat >> /etc/systemd/system/mysqld.service << END_CONFIG
.include /lib/systemd/system/mysqld.service
[Service]
PrivateTmp=false
END_CONFIG

Затем перезагрузите конфигурацию, запустив: systemctl daemon-reload и перезапустите MySQL.

1 голос
/ 17 декабря 2015

У меня были эти (errno: 13) ошибки, и я понял их только после просмотра / var / log / syslog, так что мой совет такой:

tail -f /var/log/syslog

Посмотрите, имеет ли это какое-либо отношение к файлам базы данных после попытки доступа к базе данных, в моем случае это было

apparmor=[DENIED]

Это означает, что вам нужно иметь дело с apparmor, но в вашем случае это может быть что-то еще.

1 голос
/ 22 октября 2014

У меня была такая же проблема сегодня на моем экземпляре Amazon Red Hat. Я не смог выполнить ни mysql decribe (из оболочки mysql), ни выполнить mysqldump. Чтобы решить эту проблему, я попробовал наиболее очевидное решение:

# chown root:root /tmp -v
# chmod 1777 /tmp -v
# /etc/init.d/mysqld restart

Но это не помогло. В /var/log/mysqld.log я все еще видел:

141022 10:23:35  InnoDB: Error: unable to create temporary file; errno: 13
141022 10:23:35 [ERROR] Plugin 'InnoDB' init function returned error.
141022 10:23:35 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

Выяснилось, что это был SELinux, который не позволял демону MySQL записывать в / tmp. Поэтому я сделал следующее:

# getenforce 
Enforcing

Чтобы проверить, работает ли SELinux в принудительном режиме (вы можете узнать больше об этом здесь ). Быстрое и быстрое решение для этого состояло в том, чтобы переключиться в разрешающий режим SELinux:

# setenforce 0
# getenforce 
Permissive
# /etc/init.d/mysqld restart

Вышесказанное решило мою проблему.

Обратите внимание, что если вы работаете над усиленным производством, вы должны быть очень осторожны при переходе от принудительного к принудительному. Также обратите внимание, что этот конкретный параметр будет сброшен после перезагрузки.

1 голос
/ 21 апреля 2012

вы устанавливаете атрибут MaxNoOfOrderedIndexes в вашем config.ini? По умолчанию установлено значение 128, поэтому, если у вас есть много таблиц для создания, последняя из них не может быть создана. увидеть: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-maxnooforderedindexes

0 голосов
/ 31 августа 2017

в моем случае:

    # semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
    # restorecon -Rv /datadir
    #chcon -R -t mysqld_db_t /datadir

решил мою проблему.

...