Mysql Fatal error, en una de sus versiones (hay muchas más), en las que mysqlcheck no puede reparar las tablas y MySQL no arranca.
Uno de los mayores problemas del apagón eléctrico o apagado forzado de un servidor, junto con determinados sistemas de ficheros como ext3/ext4 (y otros), y MySQL, es la posibilidad de tener múltiples problemas al reiniciarse la máquina, y ver que nuestro servidor MySQL no inicia, y nuestras paginas web, y las cuentas de nuestro hosting alojadas en ese servidor MySQL son incapaces de funcionar.
Revisando los logs de MySQL y realizando tareas de reparación obtenemos distintos mensajes:
[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format 'host'
Contenidos
Lo primero que debemos hacer es, como siempre, monitorizar los logs del servidor que presenta por lo general ubicados en un servidor Cpanel en /var/lib/mysql/nombredelhost.err abriendo una consola shell
tail -f /var/lib/mysql/nombredelhost.err
Después en otra consola o shell interactiva con screen ejecutaremos los comandos necesarios para monitorizar el problema.
# service mysql status
ERROR! MySQL is not running
tail -f /var/lib/mysql/nombredelhost.err
[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format 'host'
Este mensaje es grave ya que mysql no puede arrancar y aquí tenemos distintas opciones según nuestra política de copias de seguridad.
Si tenemos activa una de las dos opciones siguientes, podremos intentar la secuencia indica mas abajo.
root@host [~]# tar cvfz /path/backups/mysql.tar.gz /var/lib/mysql/ #Hacemos copia de seguridad por si acaso (SIEMPRE)
cd /tmp
tar xvfz /path_backups_cpanel/fecha_backup/system/dirs/_var_lib_mysql_.tar.gz
rsync -avvz --progress var/lib/mysql/mysql/ /var/lib/mysql/mysql/
service mysql start
Con esto deberiamos ver en el log el mensaje de puesta en marcha de MySQL
150527 08:39:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
150527 8:39:27 [Note] Plugin 'FEDERATED' is disabled.
150527 8:39:27 InnoDB: The InnoDB memory heap is disabled
150527 8:39:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150527 8:39:27 InnoDB: Compressed tables use zlib 1.2.3
150527 8:39:27 InnoDB: Using Linux native AIO
150527 8:39:27 InnoDB: Initializing buffer pool, size = 128.0M
150527 8:39:27 InnoDB: Completed initialization of buffer pool
150527 8:39:27 InnoDB: highest supported file format is Barracuda.
150527 8:39:28 InnoDB: Waiting for the background threads to start
150527 8:39:29 InnoDB: 5.5.42 started; log sequence number 3504302644
150527 8:39:29 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
150527 8:39:29 [Note] - '0.0.0.0' resolves to '0.0.0.0';
150527 8:39:29 [Note] Server socket created on IP: '0.0.0.0'.
150527 8:39:29 [Note] Event Scheduler: Loaded 0 events
150527 8:39:29 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.42-cll' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server (GPL)
Esta opción es valida también para otros sistemas sin Cpanel con la salvedad de que los path pueden cambiar de acuerdo a la instalación del sistemas o las preferencias del administrador.
tar cvfz /path/backups/mysql.tar.gz /var/lib/mysql/
mysql --skip-grant &
mysql mysql
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host
Error : Incorrect file format 'columns_priv'
error : Corrupt
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.servers OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
mysqldump mysql > /path_backups/mysql/mysql_dump.sql
mysql -e "DROP DATABASE mysql;"; mysql_install_db
mysql --one-database mysql > /path_backups/mysql/mysqldump_anterior_al_problema.sql
ps aux | grep mysqld | awk '{print $2}' | while read l; do kill -9 $l; done
service mysql start
En nuestro sitio obtenemos un mensaje de error de nuestro software indicando que una tabla no puede usar y que esta marcada para ser reparada. Intentamos su reparación y obtenemos:
mysqlcheck --repair mibd
error : Can't create new tempfile: './mibd/tabla_con_problemas.TMD
status : Operation failed
tail -f /var/lib/mysql/nombredelhost.err
[ERROR] /usr/sbin/mysqld: Incorrect key file for table './mibd/mitablaconproblemas.MYI'; try to repair it
[ERROR] /usr/sbin/mysqld: Table './mibd/mitablaconproblemas' is marked as crashed and last (automatic?) repair failed
Solución reparando la BD con
myisamchk -r -f /var/lib/mysql/mibd/mitablaconproblemas.MYI
(1) En Cpanel esta instalado por defecto rsync. En mi opinión muchas operaciones con sistemas en los que tenemos que hacer copias o restauras ficheros, se realizan con mas velocidad y mejor que comprimiendo y descomprimiendo ficheros. tar cvfz /path/backups/mysql.tar.gz /var/lib/mysql/ podemos sustituirlo por rsync -avzz --progress /var/lib/mysql/ /path/backups/mysql/
(2) Solo en el caso de que nuestro backup original de la bd de mysql se halla realizado sin la opción CREATE DATABASE /*!32312 IF NOT EXISTS*/. Si el mysqldump se realizo de forma correcta, el proceso de restauración del fichero .sql creara la BD mysql
(3)–one-database nos permite restaurar una sola base de datos de un fichero realizado con mysql que contiene todas las bases de datos del servidor (mysqldump –opt). También podemos extraer si lo preferimos la base de datos deseada usando sed.
# Extracción de una base de datos de un fichero dump.sql completo
sed -n '/^-- Current Database: `mysql`/,/^-- Current Database: `/p' dumpcompleto.sql > dumpmysql.sql
Si sed lanzara el error sed: RE error: illegal byte sequence como pude ocurrir en Mac OS X, se trata de un problema de locales. Para solventarlo debemos ejecutarlo así:
LC_ALL=C sed -n '/^-- Current Database: `mysql`/,/^-- Current Database: `/p' dumpcompleto.sql > dumpmysql.sql
Imagen Designed by Freepik
Comparte este artículo
Comparte este articulo en
¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…
Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…
La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…
No es la primera vez que me encuentro con el agotamiento de la memoria en…
Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…
Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…