“Não foi possível encontrar o arquivo mysql / plugin.frm” ao iniciar o MySQL

17

Quando inicio o servidor MySQL, recebo este erro:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

Eu corri mysql_upgradepara reconstruí-lo, e ele funciona para reconstruir. Antes de fazer isso, removi e instalei o MySQL. No entanto, quando tentei reiniciar, recebo o mesmo erro. Estou certo de que não é um problema de permissão, pois todos os arquivos e diretórios são criados pelo mysqlusuário.

Você poderia me aconselhar sobre como corrigir esse erro?

amacleod
fonte
O selinux também pode causar esse problema.
27415 Ross

Respostas:

16

Se você possui o diretório de dados mysql em local não padrão e o seu sistema possui aparmor, verifique /etc/apparmor.d/usr.sbin.mysqldse o diretório de dados está na lista de permissões. A configuração deve se parecer com:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

O daemon do Apparmor deve ser reiniciado depois que você fizer alterações na configuração.

xyzman
fonte
1
apparmorvolta para nos acordar de vez em quando, apenas para que não se esqueça sobre ele ...
Anel Ø
1
Uau! muito tempo procurando essa resposta. Obrigado!
Diego Andrés Díaz Espinoza
No meu caso, eu também uso um diretório temporário personalizado e descobri que precisava imitar algumas linhas de /etc/apparmor.d/abstractions/user-tmp. Quando eu coloco owner /mysql-tmp/** rwkl, /mysql-tmp/ r,em /etc/apparmor.d/local/usr.sbin.mysqldque começou a trabalhar para mim no Ubuntu 14.04.
amacleod
12

Tem certeza de que não se trata de permissões? número de erro: 13 :

$ perror 13
OS error code  13:  Permission denied

A primeira coisa a tentar é mudar a propriedade do datadir do MySQL , por exemplo, se você executar o MySQL com o usuário mysql :

chown -R mysql:mysql /path/to/datadir

Outra coisa a verificar é se o proprietário do processo mysqld (provavelmente o mysql ) possui os privilégios necessários para o destino definido como tmpdir . E se por qualquer motivo o acima não funcionar, tente rastrear o processo mysqld para ver onde e por que a permissão é negada :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log
Dimitre Radoulov
fonte
Corri para o mesmo problema ao atualizar do MySQL 5.1 para 5.7. Parece que o usuário mysql perdeu a propriedade do diretório / var / lib / mysql .
Rob
1

Eu concordo com Dimitre. Esse problema ocorre principalmente devido a permissões insuficientes. Mude a propriedade da pasta raiz do MySql para mysql.

chown -R mysql:mysql [mysql root folder]

Você pode querer alterar a permissão dos scripts Mysql para seu usuário personalizado.

chown my_mysql:my_mysql [mysqld etc]

Isso funcionou para mim.

Muneeb Mirza
fonte
1

No meu caso, eu precisava colocar o diretório de dados do MySQL, incluindo a ibdata1pasta em outro particionamento, porque ibdata1estava crescendo muito rápido e ocorreu um problema de memória. Para isso, tive que alterar o arquivo my.cnf como abaixo.

my.cnf era:

datadir         =  /var/lib/mysql

my.cnf agora:

datadir         = /home/ubuntu/data/mysql

Eu tentei,

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

mas ainda tem o mesmo erro acima. Então eu tentei mudar o /etc/apparmor.d/usr.sbin.mysqldarquivo. Isso funcionou bem para mim.

Deveríamos colocar nossa nova pasta na lista de permissões usr.sbin.mysqld.

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

Em vez das linhas acima, adicione,

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

Então reinicie o servidor MySQL.

Sithara
fonte
1

Se você estiver executando o SELinux, o seguinte também poderá ajudar ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa
Mike Purcell
fonte
Para mim, restorecon -R /var/lib/mysqlajudou a restaurar corretamente as configurações do SELinux para o diretório.
Sebi
0

Eu tive esse problema depois de atualizar de 5.5 para 5.6.

Estranhamente, parecia que o mysqlusuário havia sido removido e recriado, o que fez com que todos os arquivos mysql essencialmente 'perdessem' suas permissões ...

Eu descobri isso indo para o diretório mysql (que no meu caso não era o diretório padrão, como eu o mudei) e vi que o proprietário era apenas um número uuid e guid ... Então, eu executei chown mysql:mysqltodos os dirs e arquivos e voila

Just Lucky Really
fonte
-1

Este simples chownfuncionou para mim também, não há mais processo de travamento:

sudo chown -R mysql:mysql  /var/lib/mysql

Felizmente, brincar com o apparmor fica complicado e difícil de editar.

tomthumb99
fonte