mysqld fornece errcode:13 porque não pode criar arquivos de teste

mysqld fornece errcode:13 porque não pode criar arquivos de teste

Nova instalação do 11.04. Então segui todas as instruções aqui: http://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-ubuntu-11.04-lamp

Agora, quando executo o mysqld, recebo este erro:

makara@rahu:~$ mysqld
111103 13:39:37 [Warning] Can't create test file /var/lib/mysql/rahu.lower-test
111103 13:39:37 [Warning] Can't create test file /var/lib/mysql/rahu.lower-test
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13)
111103 13:39:37 [ERROR] Aborting
111103 13:39:37 [Note] mysqld: Shutdown complete

Alguém no IRC disse que pode ser um problema de pacote?

Obrigado beterraba

Responder1

Encontrei o mesmo problema após a atualização do Oneiric para o Precise, que atualiza o MySQL de 5.1 para 5.5.

No meu caso, o problema foi que

/etc/apparmor.d/local/usr.sbin.mysqld

estava faltando, embora tenha sido incluído a partir de

/etc/apparmor.d/usr.sbin.mysqld

por padrão. Um simples

sudo touch /etc/apparmor.d/local/usr.sbin.mysqld

resolveu o problema para mim.

Para quem procura: o arquivo de log que contém as informações interessantes é /var/log/upstart/mysql. Não haverá nada em /var/log/mysql(*|/*)

O que você vê pode incluir:

  • sudo service mysql startresulta em

    start: Falha ao iniciar o trabalho

  • Tentar iniciar manualmente mysqldcomo um usuário normal falhará normalmente (antes que o problema acima entre em ação), porque o usuário não tem acesso a /var/lib/mysql (isso pode ser encontrado no syslog).

  • Iniciar o mysqld como root terá sucesso (não sei por que)

Responder2

mysqld deve ser executado como usuário mysql. Você não deve executar o daemon manualmente. Melhor iniciá-lo como um serviço como este:

sudo service mysql start

A mensagem de erro indica que o serviço mysql não pode acessar determinados arquivos que não deveriam ter acesso em seu ambiente de usuário. Portanto, esse comportamento deve estar correto. No entanto, você deve verificar se os diretórios existem e quem os possui e quem tem acesso a eles (use ls -la para este propósito):

ls -la  /var/lib/
ls -la  /var/lib/mysql

informação relacionada