MySQL/MariaDB falla al arrancar en servidor Plesk Linux: Can’t open and lock privilege tables
Síntomas:
- MySQL/MariaDB falla al iniciar debido a tablas que faltan en la base de datos ‘MySql9. Errores similares a los que aparecen en los siguientes logs.
- CentOS/RHEL:
/var/log/mysqld.log
- Debian/Ubuntu:
/var/log/mariadb/mariadb.log
- CentOS/RHEL:
/usr/libexec/mysqld: Incorrect file format ‘plugin’
[ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
…
[ERROR] Fatal error: Can’t open and lock privilege tables: Incorrect file format ‘host’O
/usr/sbin/mysqld: Table ‘mysql.plugin’ doesn’t exist
[ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
…
[ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t existO
[ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.
[ERROR] Can’t open and lock privilege tables: Table ‘mysql.servers’ doesn’t exist
[ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist
Problemas observados:
- Plesk no está accesible dando uno de los siguientes mensajes en el navegador:
ERROR: PleskDBException: Unable to connect to database: mysql_connect(): No such file or directory /var/run/mysqld/mysqld.sock (Error code: 2002). Please check that database server is started and accessible. (Abstract.php:69)
OR
ERROR: Uncaught exception ‘Zend_Log_Exception’ with message ‘»/var/log/plesk/panel.log» cannot be opened with mode «a»‘ in /usr/local/psa/admin/externals/Zend/Log/Writer/Stream.php:81
OR
SQLSTATE[HY000] [2002] No such file or directory.
Causa:
Hay tablas que faltan o están corruptas en la base de datos ‘mysql’
Solución:
- Conectar al servidor Plesk vía SSH
- Modificar el fichero de configuración:
- en Centos/RHEL:
-
# nano /etc/my.cnf
-
- en Debian/Ubuntu:
-
# nano /etc/mysql/my.cof
-
- en Centos/RHEL:
- Añadir la línea skip-grant-tables bajo la directiva[mysql]
-
[mysqld] skip-grant-tables
-
- Iniciar MySql con uno de los comandos siguientes dependiendo del sistema operativo:
-
# service mariadb restart
-
# service mysql restart
-
# service mysqld restart
-
- Recrear las tablas MySQL con el comando mysql_upgrade:
-
# mysql_upgrade –force
-
- Reiniciar MySQL
-
# service mariadb restart
-
# service mysql restart
-
# service mysqld restart
-
- Restaurar la base de datos ‘mysql’ desde una copia diaria de plesk:
-
# cd /var/lib/psa/dumps
- debería ser mysql.daily.dump.0.gz (también 1.gz o 2.gz, siempre buscamos la última que funcione, en este caso la 0.gz es la última)
-
# zcat mysql.daily.dump.0.gz | sed -n ‘/– Current Database: `mysql`/,/– Current Database:*/p’ | MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysql -uadmin
-
- Eliminar la línea skip-grant-tables del my.conf
- Reiniciar MySQL
-
# service mariadb restart
-
# service mysql restart
-
# service mysqld restart
-
El problema debería quedar resuelto.