Mysql non è riuscito a scrivere su / tmp, quindi non è stato riavviato


11

Stavo eseguendo un orthomclprogramma che utilizza mysql. Questo programma ha funzionato bene sullo stesso computer prima. Questa volta ho ricevuto un messaggio di errore.

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.

Ho provato a riavviare il mysqlserver, il server è stato spento ma non è stato possibile avviarlo.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.loge /var/log/mysql.errsono vuoti. Ho provato un paio di cose che ho trovato qui compreso lo spurgo e la reinstallazione mysql-servere la rimozione ib_logfile*in /var/lib/mysql.

L'altra cosa che ho provato è

sudo dpkg-reconfigure mysql-server-5.5

I messaggi di errore sono:

/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

Ecco alcune informazioni da 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

C'erano molte molte righe come questa.

Qualcuno potrebbe aiutarmi a capire cosa c'è che non va nel mio server MySQL, per favore?

Grazie molto.

Risposte:


15

La ragione di questo è che il vostro /tmpè un collegamento simbolico in un'altra posizione, /home/tmp. Ma MySQL è corazzato da AppArmor, che non consente di scrivere liberamente /home/tmp. Per porre rimedio alla situazione, è possibile modificare /etc/apparmor.d/abstractions/user-tmpe aggiungere /home/tmplì in modo appropriato; per me le linee extra

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

ha fatto il trucco.


1
Perfetto! Risolto il problema immediatamente. Ero sicuro che avesse qualcosa a che fare con il collegamento simbolico!
YonoRan,

1
Ho dovuto riavviare apparmor per rendere effettive le modifiche:sudo /etc/init.d/apparmor restart
Nadjib Mami,

6

Sembra che tu non abbia le autorizzazioni giuste su /tmp, che dovrebbe essere scrivibile dal mondo. Dovresti essere in grado di risolverlo con questo comando:

sudo chmod 1777 /tmp

Ciò imposterà le autorizzazioni su 777(rwx per tutti) e anche il bit appiccicoso che è raccomandato per la /tmpdirectory. Come spiegato in man chmod:

BANDIERINA PER ELIMINAZIONE LIMITATA O MORSO STICKY

Il flag di cancellazione limitata o il sticky bit è un singolo bit, la cui interpretazione dipende dal tipo di file. Per le directory, impedisce agli utenti non privilegiati di rimuovere o rinominare un file nella directory a meno che non possiedano il file o la directory; questo viene chiamato flag di eliminazione limitata per la directory e si trova comunemente nelle directory scrivibili dal mondo come / tmp. Per i file regolari su alcuni sistemi più vecchi, il bit salva l'immagine di testo del programma sul dispositivo di scambio in modo che si carichi più rapidamente durante l'esecuzione; questo si chiama il pezzettino appiccicoso.


@ScottSeverance, per favore, non cambiare il codice tra virgolette solo per il gusto di cambiare. Sì, lo so che stavo citando, ma il blocco di codice offre una migliore formattazione e rispetta l'intestazione e il rientro. Il modo in cui l'hai modificato, tutto è sulla stessa linea.
terdon,

1
L'ho cambiato perché quando è formattato come codice non riesco a leggerlo sul mio telefono senza uno scorrimento orizzontale costante. Non c'è davvero alcun vantaggio nel formattare un preventivo come codice. Se non ti piace che l'intestazione si trovi sulla stessa linea, ci sono modi per risolverlo senza interrompere le visualizzazioni degli utenti sui telefoni.
Scott Severance

@ScottSeverance ah, abbastanza giusto, non mi ero reso conto che causasse problemi sui telefoni. OK, lo inserirò tra virgolette. Ero solo seccato perché la tua modifica (senza spiegazioni) sembra peggiore sui normali browser e non hai verificato che il rendering sia corretto. E hai appena modificato di nuovo ed è perfetto, grazie!
terdon,

1
Il mio è la soluzione corretta. Mysql è apparmored e all'apparmor non piace che /tmpvenga spostato in un'altra posizione senza cambiare i conf. Gli audit indicano che non si tratta di un'autorizzazione negata sul filesystem, ma delle guardie di apparmor.
Antti Haapala,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.