El día de hoy estaba intentando hacer un volcado de una base de datos MySQL que contiene tablas MyISAM y me encontré con el siguiente error:

mysqldump: Error 1194: Table 'auth00' is marked as crashed and should be repaired when dumping table `auth00` at row: 338624

Esto significa que una de las tablas MyISAM está corrompida y debe ser reparada antes de poder proceder con el dump.



Este error ocurrió al tratar de volcar la base de datos "appl011", la cual posee la tabla "auth00" de tipo MyISAM:

[root@centos6 tmp]# /usr/local/mysql/bin/mysqldump -R -h localhost -P 3306 -u root -p appl011 | pbzip2 -9 -c - > backup-appl011.sql.bz2
Enter password: 
mysqldump: Error 1194: Table 'auth00' is marked as crashed and should be repaired when dumping table `auth00` at row: 338624

Anteriormente demostré cómo verificar y reparar tablas MyISAM utilizando la herramienta myisamchk:

[root@centos6 appl011]# /usr/local/mysql/bin/myisamchk --safe-recover auth00
- recovering (with keycache) MyISAM-table 'auth00'
Data records: 338624

Tal como se observa la herramienta myisamchk no arrojó errores, sin embargo por alguna razón la tabla seguía corrupta. Como si la recuperación hubiese fallado. Tal vez por estar la tabla en uso por la aplicación (debía hacer el volcado con la aplicación en ejecución, pues se trataba de un servidor de producción en horario de oficina).

[root@centos6 tmp]# /usr/local/mysql/bin/mysqldump -R -h localhost -P 3306 -u root -p appl011 | pbzip2 -9 -c - > backup-appl011.sql.bz2
Enter password: 
mysqldump: Error 1194: Table 'auth00' is marked as crashed and should be repaired when dumping table `auth00` at row: 338624

Como no tenía la posibilidad de detener la aplicación y el motor de bases de datos, no me quedó otra alternativa que hacerlo desde el cliente mysql:

[root@centos6 tmp]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.6.36-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Una vez establecida la conexión con el servidor, cambiar a la base de datos en cuestión:

mysql> use appl011
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Luego, reparar la tabla "auth00" mediante REPAIR TABLE:

mysql> repair table auth00;
+----------------+--------+----------+----------------------------------------------+
| Table          | Op     | Msg_type | Msg_text                                     |
+----------------+--------+----------+----------------------------------------------+
| appl011.auth00 | repair | warning  | Number of rows changed from 339266 to 338624 |
| appl011.auth00 | repair | status   | OK                                           |
+----------------+--------+----------+----------------------------------------------+
2 rows in set (5,16 sec)

Se observa que la tabla fue reparada y cambió el número de filas.

mysql> quit
Bye

Salir del cliente e intentar el volcado nuevamente:

[root@centos6 tmp]# /usr/local/mysql/bin/mysqldump -R -h localhost -P 3306 -u root -p appl011 | pbzip2 -9 -c - > backup-appl011.sql.bz2
Enter password: 
[root@centos6 tmp]#

Ahora sí funciona. En definitiva, tuve que reparar una tabla MyISAM desde el cliente mysql utilizando la sentencia REPAIR TABLE en lugar de poder utilizar myisamchk desde línea de comandos.


Tal vez pueda interesarte


Compartí este artículo