Frage

Ich laufe Mysql auf Ubuntu 9.10, der Prozess der Mysql als root läuft, ich bin root-Konto zu verwenden, wenn zu Mysql Anmeldung, die ich alle Privilegien gab, ich bin meine eigene db (nicht mysql) verwenden, ich eine Tabelle erstellen kann, aber wenn ich versuche zu erstellen temporäre Tabelle ich diesen Fehler:

ERROR 1005 (HY000): Can not create table 'tmp' (errno: 13)

Für diese Abfrage:

CREATE TEMPORARY TABLE tmp (id int);

Ich habe viel Platz in meiner Festplatte, alle Berechtigungen erteilt werden (auch var / lib / MySQL MySQL-Berechtigungen).

Jede Idee? Vielen Dank, Koby

War es hilfreich?

Lösung 2

Nun ... in /etc/mysql/my.cnf gibt es die „tmp“ Ordner für die Verwendung, die ist / tmp (von root) als Standard .. und haben nicht mysql Privilegien. chmod 0777 / tmp den Trick

Andere Tipps

Ich hatte das gleiche Problem vor ein paar Wochen. Die Datenbankordner auf dem Dateisystem wurde von dem falschen Benutzer gehört. Ein einfaches chown -R mysql:mysql /var/lib/mysql/database_name hat den Trick!

Alles erklärt sich hier: http://www.dinosources.eu/ 2010/10 / mysql-cant-create-Tabelle (es ist italienisch, aber es ist ziemlich klar)

Prost

Ich hatte den Fehler, der oben mit richtigen Berechtigungen für / tmp, richtigen Kontext und ausreichend Speicherplatz auf Fedora 16.

Nach einem Tag meine Haare herauszureißen, verfolgt ich das Problem auf eine Einstellung in systemd Konfiguration für den MySQL-Dienst.

In /etc/systemd/system/multi-user.target.wants/mysqld.service Check für, wenn es eine Einstellung PrivateTmp=true. Diese Änderung Kräfte MySQL ein / tmp / systemd-Namespace-XXXXX Unterverzeichnis verwenden anstelle von Dateien direkt in / tmp setzen. Offenbar MySQL nicht so, und mit einer Erlaubnis verweigert Fehler fehlschlagen (13) für jede Abfrage, die die Erstellung einer temporären Datei erforderlich ist.

Sie können diese Einstellung außer Kraft setzen, wie folgt:

cat >> /etc/systemd/system/mysqld.service << END_CONFIG
.include /lib/systemd/system/mysqld.service
[Service]
PrivateTmp=false
END_CONFIG

Dann Konfiguration neu laden, indem Sie:. systemctl daemon-reload und Neustart MySQL

tun Sie das Attribut MaxNoOfOrderedIndexes in Ihrem config.ini einstellen? Es ist Standardwert ist 128, also wenn Sie viele Tabellen zu erstellen, zuletzt von ihnen nicht erstellt werden kann. sehen: http: // dev .mysql.com / doc / refman / 5.1 / de / mysql-cluster-ndbd-definition.html # ndbparam-ndbd-MaxNoOfOrderedIndexes

Ich hatte das gleiche Problem heute auf meinem Amazon Red Hat-Instanz. Ich konnte weder mysql decribe (von Shell mysql) durchzuführen, noch Mysqldump auszuführen. Um dies zu lösen ich die naheliegendste Lösung versucht:

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

Aber das hat nicht geholfen. Im /var/log/mysqld.log ich noch sah:

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.

Es kam heraus, dass es SELinux, die nicht erlaubte, MySQL-Daemon zu schreiben / tmp. Deshalb, was ich tat, war an:

# getenforce 
Enforcing

Um zu überprüfen, ob SELinux bei der Durchsetzung Modus ausgeführt wird (Sie können mehr über diese hier ). Die schnelle und schnelle Lösung für diese war Schalter auf SELinux permissiven Modus:

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

Das gelöst über mein Problem.

Bitte beachten Sie, dass, wenn Sie sich auf gehärtete Produktion arbeiten, sollten Sie sehr vorsichtig sein, wenn Sie von der Durchsetzung wechseln permissive. Bitte beachten Sie auch, dass diese spezifische Einstellung zurückgesetzt nach dem Neustart sein wird.

Ich hatte diese (errno: 13) Fehler und sie erst nach der Suche in / var / log / syslog herausgefunden, so mein Rat ist dies:

tail -f /var/log/syslog

Siehe, ob das etwas mit Datenbank-Dateien zu tun hat, nachdem Sie versuchen, auf die Datenbank zuzugreifen, in meinem Fall war es

apparmor=[DENIED]

Was bedeutet, dass Sie mit apparmor befassen müssen, aber in Ihrem Fall könnte es etwas anderes sein.

mit meinem Fall:

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

mein Problem gelöst.

Wenn PhpMyAdmin mit XAMPP auf Linux installiert, kann der Benutzer auf diesem Weg gesetzt werden:

sudo chown -R mysql:mysql /opt/lampp/var/mysql/my_database

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top