Ошибка Mysql 1005 (HY000): не удается создать таблицу ' tmp ' (errno: 13)

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

ошибка 1005 (HY000): не удается создать таблицу 'tmp' (errno: 13)

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

создать временную таблицу tmp (id int);

У меня много места на жестком диске, все разрешения предоставляются(также var/lib / mysql имеют разрешения mysql).

есть идеи? Спасибо, Коби!--1-->

7 ответов


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

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

Ура


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


у меня была ошибка выше с правильными разрешениями на /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.


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


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

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

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

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. Поэтому я сделал следующее:--5-->

# getenforce 
Enforcing

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

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

вышеизложенное решило мою проблему.

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


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

tail -f /var/log/syslog

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

apparmor=[DENIED]

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


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

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

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