MySQL konnte nicht in / tmp schreiben und konnte dann nicht neu gestartet werden

11

Ich habe ein orthomclProgramm ausgeführt, das verwendet mysql. Dieses Programm hat zuvor auf demselben Computer einwandfrei funktioniert. Diesmal hatte ich eine Fehlermeldung.

DBD::mysql::st execute failed: Can't create/write to file '/tmp/#sql_700_1.MYI' (Errcode: 13) at /usr/local/bioinf/orthomclSoftware-v2.0.9/bin/orthomclPairs line 709, <F> line 14.

Ich habe versucht mysql, den Server neu zu starten. Der Server wurde ausgeschaltet, konnte jedoch nicht gestartet werden.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.logund /var/log/mysql.errsind leer. Ich habe ein paar Dinge ausprobiert , dass ich hier mit Spülung gefunden und neu zu installieren mysql-serverund zu entfernen ib_logfile*in /var/lib/mysql.

Das andere, was ich versucht habe, ist

sudo dpkg-reconfigure mysql-server-5.5

Die Fehlermeldungen sind:

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibNzqwO0' (Errcode: 13)
InnoDB: Error: unable to create temporary file; errno: 13
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

Hier einige Informationen von dmesg | grep mysql:

[3115187.338273] init: mysql main process (44255) terminated with status 1
[3115187.338417] init: mysql main process ended, respawning
[3115187.356361] init: mysql post-start process (44256) terminated with status 1
[3116827.473256] type=1400 audit(1396394069.224:132): apparmor="DENIED" operation="open" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/" pid=45396 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[3116827.582489] type=1400 audit(1396394069.332:133): apparmor="DENIED" operation="mknod" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/#sql_b154_0.MYI" pid=45402 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
[3116827.908448] type=1400 audit(1396394069.660:134): apparmor="DENIED" operation="mknod" parent=45317 profile="/usr/sbin/mysqld" name="/home/tmp/ibbPfaqP" pid=45415 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=118 ouid=118
[3116841.623608] type=1400 audit(1396394083.372:139): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=45443 comm="apparmor_parser"
[3116841.771621] init: mysql pre-start process (45474) terminated with status 1

Es gab viele, viele Zeilen wie diese.

Könnte mir jemand helfen, herauszufinden, was mit meinem MySQL-Server nicht stimmt?

Danke vielmals.

user264649
quelle

Antworten:

15

Der Grund dafür ist, dass Sie /tmpmit einem anderen Ort verbunden sind /home/tmp. Aber MySQL wird von AppArmor gepanzert, was das freie Schreiben nicht erlaubt /home/tmp. Um Abhilfe zu schaffen, können Sie das dort bearbeiten /etc/apparmor.d/abstractions/user-tmpund entsprechend hinzufügen /home/tmp; für mich die extra Zeilen

  owner /home/tmp/**    rwkl,
  /home/tmp/            rw,

hat den Trick gemacht.

Antti Haapala
quelle
1
Perfekt! Das Problem wurde sofort behoben. Ich war mir sicher, dass es etwas mit dem Symlink zu tun hatte!
YonoRan
1
Ich musste Apparmor neu starten, damit die Änderungen wirksam wurden:sudo /etc/init.d/apparmor restart
Nadjib Mami
6

Es hört sich so an, als hätten Sie nicht die richtigen Berechtigungen /tmp, die weltweit beschreibbar sein sollten. Sie sollten es mit diesem Befehl beheben können:

sudo chmod 1777 /tmp

777Dadurch werden die Berechtigungen auf (rwx für alle) und das für das Verzeichnis empfohlene Sticky-Bit festgelegt /tmp. Wie erklärt in man chmod:

EINGESCHRÄNKTE LÖSCHFLAGGE ODER STICKY BIT

Das eingeschränkte Löschflag oder Sticky-Bit ist ein einzelnes Bit, dessen Interpretation vom Dateityp abhängt. Bei Verzeichnissen wird verhindert, dass nicht privilegierte Benutzer eine Datei im Verzeichnis entfernen oder umbenennen, es sei denn, sie besitzen die Datei oder das Verzeichnis. Dies wird als eingeschränktes Löschflag für das Verzeichnis bezeichnet und ist häufig in weltweit beschreibbaren Verzeichnissen wie / tmp zu finden. Bei normalen Dateien auf einigen älteren Systemen speichert das Bit das Textbild des Programms auf dem Auslagerungsgerät, damit es beim Ausführen schneller geladen wird. Dies wird als klebriges Bit bezeichnet.

Terdon
quelle
@ScottSeverance Bitte ändern Sie den Code nicht in Anführungszeichen, nur um Änderungen vorzunehmen. Ja, ich weiß, dass ich zitiert habe, aber der Codeblock bietet eine bessere Formatierung und berücksichtigt den Header und den Einzug. So wie Sie es bearbeitet haben, befindet sich alles in derselben Zeile.
Terdon
1
Ich habe es geändert, weil ich es, wenn es als Code formatiert ist, ohne ständiges horizontales Scrollen nicht auf meinem Telefon lesen kann. Das Formatieren eines Angebots als Code hat wirklich keinen Vorteil. Wenn Sie nicht möchten, dass sich die Überschrift in derselben Zeile befindet, können Sie dies beheben, ohne die Anzeige der Benutzer auf den Telefonen zu beeinträchtigen.
Scott Severance
@ScottSeverance ah, fair genug, ich hatte nicht bemerkt, dass es Probleme auf Telefonen verursachte. OK, ich werde es dann in einen Anführungszeichen setzen. Ich war nur verärgert, weil Ihre Bearbeitung (ohne Erklärung) in normalen Browsern schlechter aussieht und Sie nicht überprüft haben, ob sie korrekt wiedergegeben wird. Und du hast es gerade noch einmal bearbeitet und es ist perfekt, danke!
Terdon
1
Meins ist die richtige Lösung. MySQL ist Apparmored und der Apparmor mag es nicht /tmp, an einen anderen Ort verschoben zu werden, ohne die Confs zu ändern. Die Audits zeigen, dass es nicht um die Verweigerung der Erlaubnis für das Dateisystem geht, sondern um die Apparmor Guards.
Antti Haapala