it-swarm.com.ru

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

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

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

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

CREATE TEMPORARY TABLE tmp (id int);

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

Любая идея? Спасибо, Коби

14
koby

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

4
koby

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

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

Ура

30
Marchino

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

2
Oleg Barshay

У меня была такая же проблема сегодня на моем экземпляре 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

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

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

1
Bartosz Firyn

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

1
songjiesdnu

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

tail -f /var/log/syslog

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

apparmor=[DENIED]

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

0
inkredibl

с моим делом:

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

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

0
Robin LI