"No se puede encontrar el archivo mysql / plugin.frm" al iniciar MySQL


17

Cuando inicio mi servidor MySQL, aparece este error:

/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.

He corrido mysql_upgradepara reconstruirlo, y funciona para reconstruir. Antes de hacerlo, eliminé e instalé MySQL. Sin embargo, cuando intenté reiniciar, aparece el mismo error. Estoy seguro de que no es un problema de permisos, ya que el mysqlusuario crea todos los archivos y directorios .

¿Me podría aconsejar sobre cómo solucionar este error?


Selinux también puede causar este problema.
Ross

Respuestas:


16

Si tiene un directorio de datos mysql en una ubicación no estándar y su sistema tiene una apariencia, asegúrese de que /etc/apparmor.d/usr.sbin.mysqldsu directorio de datos esté en la lista blanca. La configuración debería verse así:

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

El demonio Apparmor debe reiniciarse después de realizar cualquier cambio en la configuración.


1
apparmorvuelve para despertarnos de vez en cuando, solo para que no nos olvidemos de él ...
Anillo Ø

1
¡Guauu! Mucho tiempo buscando esta respuesta. ¡Gracias!
Diego Andrés Díaz Espinoza

En mi caso, también uso un directorio temporal personalizado, y descubrí que necesitaba imitar algunas líneas /etc/apparmor.d/abstractions/user-tmp. Cuando pongo owner /mysql-tmp/** rwkl, /mysql-tmp/ r,en /etc/apparmor.d/local/usr.sbin.mysqldque comenzó a trabajar para mí en Ubuntu 14.04.
amacleod 01 de

12

¿Estás seguro de que no se trata de permisos? errno: 13 :

$ perror 13
OS error code  13:  Permission denied

Lo primero que debe intentar es cambiar la propiedad del datadir de MySQL , por ejemplo, si ejecuta MySQL con el usuario mysql :

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

Otra cosa a verificar es si el propietario del proceso mysqld (probablemente mysql ) tiene los privilegios necesarios para el destino definido como tmpdir . Y si por alguna razón lo anterior no funciona, intente rastrear el proceso mysqld para ver dónde y por qué se le niega el permiso :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

Me encontré con el mismo problema al actualizar MySQL 5.1 a 5.7. Parece que el usuario mysql perdió la propiedad del directorio / var / lib / mysql .
Rob el

1

Estoy de acuerdo con Dimitre. Este problema surge principalmente debido a permisos insuficientes. Cambie la propiedad de la carpeta raíz MySql a mysql.

chown -R mysql:mysql [mysql root folder]

Sin embargo, es posible que desee cambiar el permiso de los scripts Mysql a su usuario personalizado.

chown my_mysql:my_mysql [mysqld etc]

Esto funcionó para mí.


1

En mi caso, necesitaba colocar el directorio de datos de MySQL, incluida la ibdata1carpeta, en otra partición porque ibdata1estaba creciendo demasiado rápido y se produjo un problema de memoria. Para eso, tuve que cambiar mi archivo .cnf como a continuación.

my.cnf fue:

datadir         =  /var/lib/mysql

my.cnf ahora:

datadir         = /home/ubuntu/data/mysql

Lo intenté,

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

pero aún tiene el mismo error anterior. Luego intenté cambiar el /etc/apparmor.d/usr.sbin.mysqldarchivo. Funciono bien para mi.

Deberíamos incluir nuestra nueva carpeta en la lista blanca usr.sbin.mysqld.

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

En lugar de agregar las líneas anteriores,

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

Luego reinicie el servidor MySQL.


1

Si está ejecutando SELinux, lo siguiente también puede ayudar ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

Para mí, esto restorecon -R /var/lib/mysqlayudó a restaurar correctamente la configuración de SELinux para el directorio.
Sebi

0

Tuve este problema después de actualizar de 5.5 a 5.6.

Curiosamente, parecía que el mysqlusuario había sido eliminado y recreado, lo que había causado que todos los archivos mysql esencialmente 'perdieran' sus permisos ...

Descubrí esto yendo al directorio mysql (que en mi caso no era el directorio predeterminado, como lo he movido) y vi que el propietario era solo un número uuid y guid ... Entonces, simplemente ejecuté chown mysql:mysqltodos los directorios y archivos, y listo


-1

Este simple también chownfuncionó para mí, no más procesos de bloqueo:

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

Afortunadamente, jugar con apparmor se vuelve complicado y difícil de editar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.