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

StackOverflow https://stackoverflow.com/questions/2476272

Вопрос

Я запускаю 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top