Ошибка 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
решить мою проблему.