ОШИБКА Mysql 1005 (HY000):Не удается создать таблицу 'tmp' (ошибка отсутствует:13)
-
21-09-2019 - |
Вопрос
Я запускаю Mysql в ubuntu 9.10, процесс Mysql запущен от имени root, я использую учетную запись root при входе в Mysql, которой я предоставил все привилегии, я использую свою собственную базу данных (не mysql), я могу создать таблицу, но когда я пытаюсь создать временную таблицу, я получаю эту ошибку:
ОШИБКА 1005 (HY000):Не удается создать таблицу 'tmp' (ошибка отсутствует:13)
Для этого запроса:
СОЗДАЙТЕ ВРЕМЕННУЮ ТАБЛИЦУ tmp (id int);
У меня достаточно места на моем жестком диске, все разрешения предоставлены (также у var / lib / mysql есть разрешения mysql).
Есть какие-нибудь идеи?Спасибо, Коби
Решение 2
Что ж...в /etc/mysql/my.cnf есть папка "tmp" для использования, которая по умолчанию является /tmp (из root)..и не имеют привилегий mysql.chmod 0777 /tmp сделает свое дело
Другие советы
У меня была такая же проблема пару недель назад.Папка базы данных в файловой системе принадлежала не тому пользователю.Простой chown -R mysql:mysql /var/lib/mysql/database_name
сделал свое дело!
Здесь все объяснено: http://www.dinosources.eu/2010/10/mysql-cant-create-table (это по-итальянски, но довольно понятно)
Ваше здоровье
У меня была ошибка, описанная выше, с правильными разрешениями в / tmp, правильным контекстом и достаточным объемом дискового пространства в Fedora 16.
После целого дня рвания на себе волосы я отследил проблему до настройки в systemd configuration для службы 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 в вашем config.ini?Это значение по умолчанию равно 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.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
Вышесказанное решило мою проблему.
Пожалуйста, обратите внимание, что, если вы работаете над усиленным производством, вам следует быть очень осторожным при переходе от принудительного к разрешительному.пожалуйста, также обратите внимание, что эта конкретная настройка будет сброшена после перезагрузки.
У меня были эти (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
решил мою проблему.
Если установлен phpMyAdmin с XAMPP в Linux, пользователь может быть указан по этому пути:
sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database