O Mysql não pôde gravar em / tmp e falhou ao reiniciar

9

Eu estava executando o programa orthomcl , que usa mysql . Este programa funcionou muito bem no mesmo computador antes. Desta vez eu tive uma mensagem de erro.

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.

Eu tentei reiniciar o mysql server, o servidor foi desligado, mas não foi iniciado.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log e /var/log/mysql.err estão vazios. Eu tentei algumas coisas que encontrei aqui, incluindo a remoção e reinstalação do mysql-server e a remoção do ib_logfile* em /var/lib/mysql .

A outra coisa que tentei é

sudo dpkg-reconfigure mysql-server-5.5

As mensagens de erro são:

/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

Aqui estão algumas informações de 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

Havia muitas linhas como essa.

Alguém poderia me ajudar a descobrir o que há de errado com o meu servidor MySQL, por favor?

Muito obrigado.

    
por user264649 02.04.2014 / 19:59

2 respostas

12

A razão para isso é que seu /tmp é linkado simbolicamente para outro local, /home/tmp . Mas o MySQL é blindado pelo AppArmor, que não permite escrever livremente para /home/tmp . Para remediar a situação, você pode editar o /etc/apparmor.d/abstractions/user-tmp e adicionar o /home/tmp apropriadamente; para mim as linhas extras

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

fez o truque.

    
por Antti Haapala 07.12.2014 / 00:58
5

Parece que você não tem as permissões corretas em /tmp , que deve ser mundialmente gravável. Você deve conseguir consertá-lo com este comando:

sudo chmod 1777 /tmp

Isso definirá as permissões como 777 (rwx para todos) e também definirá o bit fixo recomendado para o /tmp dir. Conforme explicado em man chmod :

  

BANDEIRA DE EXCLUSÃO RESTRITA OU BOCA STICKY

     

O sinalizador de exclusão restrita ou bit pegajoso é um único bit, cujo   a interpretação depende do tipo de arquivo. Para diretórios, isso evita   usuários sem privilégios de remover ou renomear um arquivo no diretório   a menos que eles possuam o arquivo ou o diretório; isso é chamado de   sinalizador de exclusão restrita para o diretório e é comumente encontrado   diretórios graváveis pelo mundo como / tmp. Para arquivos regulares em alguns mais antigos   sistemas, o bit salva a imagem de texto do programa no dispositivo de troca   irá carregar mais rapidamente quando executado; isso é chamado de bit pegajoso.

    
por terdon 02.04.2014 / 20:56

Tags