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.