La discusión en esta sección describe cómo usar
          myisamchk en tablas
          MyISAM (extensiones
          .MYI y .MYD).
        
          También puede ( y debe, si es posible) usar los comandos
          CHECK TABLE y REPAIR
          TABLE para chequear y reparar tablas
          MyISAM . Consulte
          Sección 13.5.2.3, “Sintaxis de CHECK TABLE” y
          Sección 13.5.2.6, “Sintaxis de REPAIR TABLE”.
        
Los síntomas de tablas corruptas incluyen consultas que abortan inesperadamente y errores observables como los siguientes:
              tbl_name.frm
              Can't find file
              tbl_name.MYI###)
            
Unexpected end of file
Record file is crashed
              Got error ### from table
              handler
            
          Para obtener ejecución acerca de los errores puede ejectuar
          perror ###,
          donde ### es el número de error.
          El siguiente ejemplo muestra cómo usar
          perror para encontrar el significado de la
          mayoría de errores comunes que indican un problema con la
          tabla:
        
shell> perror 126 127 132 134 135 136 141 144 145 126 = Index file is crashed / Wrong file format 127 = Record-file is crashed 132 = Old database file 134 = Record was already deleted (or record file crashed) 135 = No more room in record file 136 = No more room in index file 141 = Duplicate unique key or constraint on write or update 144 = Table is crashed and last repair failed 145 = Table was marked as crashed and should be repaired
          Tenga en cuenta que el error 135 (no more room in record file)
          y el error 136 (no more room in index file) no son errores que
          puedan arreglarse con una simple reparación. En este caso,
          debe usar ALTER TABLE para incrementar los
          valores de las opciones de tabla MAX_ROWS y
          AVG_ROW_LENGTH:
        
ALTER TABLEtbl_nameMAX_ROWS=xxxAVG_ROW_LENGTH=yyy;
          Si no conoce los valores actuales de las opciones de tabla,
          use SHOW CREATE TABLE o
          DESCRIBE.
        
Para los otros errores, debe reparar las tablas. myisamchk normalmente detecta y arregla la mayoría de problemas que ocurren.
El proceso de reparación incluye hasta cuatro etapas, descritas aquí. Antes de empezar, debe cambiar la localización al directorio de la base de datos y comprobar los permisos de los ficheros de las tablas. En Unix, asegúrese que puede leerlos el usuario con el que corre mysqld (y con su usuario, ya que necesita acceder a los ficheros que está comprobando). En caso que necesite modificar ficheros, debe tener también permiso de escritura.
Las opciones que puede usar para el mantenimiento de tablas con myisamchk y isamchk se describen en varias de las primeras subsecciones de Sección 5.8.3, “Mantenimiento de tablas y recuperación de un fallo catastrófico (crash)”.
La siguiente sección es para los casos en los que los comandos anteriores fallen o si quiere usar las características extendidas que myisamchk y isamchk proporcionan.
Si va a reparar una tabla desde la línea de comandos, debe parar el servidor mysqld en primer lugar. Tenga en cuenta que cuando ejectua mysqladmin shutdown en un servidor remoto, el servidor mysqld todavía está activo durante un periodo de tiempo una vez que mysqladmin devuelve el control, hasta que todas las consultas están paradas y todas las claves se han volcado a disco.
Etapa 1: Comprobación de tablas
          Ejecute myisamchk *.MYI o
          myisamchk -e *.MYI si tiene más tiempo.
          Use la opción -s (silencio) para suprimir
          información innecesaria.
        
          Si el servidor mysqld está parado, debe
          usar la opción --update-state para decirle
          a myisamchk que marque la tabla como
          'comprobada'.
        
Debe reparar sólo las tablas en que myisamchk anuncia un error. Para estas tables, pase a la Etapa 2.
          Si obtiene errores extraños al hacer la comprobación (tales
          como errores out of memory), o si
          myisamchk cae, pase a la Etapa 3.
        
Etapa 2: Reparación sencilla
          Nota: Si quiere que una operación de reparación sea mucho
          más rápida, debe cambiar los valores de las variables
          sort_buffer_size y
          key_buffer_size al 25% aproximado de la
          cantidad de memoria disponible al ejecutar
          myisamchk o isamchk.
        
          En primer lugar, intente myisamchk -r -q
          tbl_name (-r
          -q significa ``modod de recuperación rápido'').
          Intenta reparar el fichero de indexación sin tocar el fichero
          de datos. Si el fichero de datos contiene todo lo que debería
          y los vínculos de borrado apuntan a la localización correcta
          dentro del fichero de datos, esto debería funcionar, y la
          tabla estaría reparada. Empiece a reparar la siguiente tabla.
          Si no es así, use el siguiente procedimiento:
        
Haga una copia de seguridad del fichero de datos antes de continuar.
              Use myisamchk -r
              tbl_name
              (-r significa ``modo de
              recuperación''). Esto elimina registros incorrectos y
              registros borrados del fichero de datos y recunstruye el
              fichero de indexación.
            
              Si el paso precedente falla, use myisamchk
              --safe-recover
              tbl_name. El modo de
              recuperación seguro usa un método de reucperación
              antiguo que soporta algunos casos que los metodos normales
              de recuperación no soportan (pero es más lento).
            
          Si obtiene errores extraños al reparar (tales como errores
          out of memory ), o si
          myisamchk cae, pase a la Etapa 3.
        
Etapa 3: Reparaciones complicadas
Debe llegar a esta etapa sólo si el primer bloque de 16KB en el fichero de indexación está destruido o contiene información incorrecta, o si el fichero de indexación no se encuentra. En este caso, es necesario crear un nuevo fichero de indexación. Hágalo así:
Mueva el fichero de datos a una ubicación segura.
Use el fichero descriptor de la tabla para crear unos ficheros de datos e indexación nuevos (vacíos):
shell> mysqldb_namemysql> SET AUTOCOMMIT=1; mysql> TRUNCATE TABLEtbl_name; mysql> quit
              Si su versión de MySQL no soporta TRUNCATE
              TABLE, use DELETE FROM
               en su lugar.
            tbl_name
Copie el antiguo fichero de datos otra vez sobre el nuevo fichero de datos (recién creado). (No se limite a mover el fichero antiguo sobre el nuevo; debe guardar una copia por si algo falla.)
Vuelva a la Etapa 2. myisamchk -r -q debería funcionar. (Este no debería ser un bucle sin fin.)
          Puede usar REPAIR TABLE
          , que
          realiza el proceso completo automáticamente.
        tbl_name USE_FRM
Etapa 4: Reparaciones muy complicadas
          Debe llegar a esta etapa sólo si el fichero de descripción
          .frm ha tenido problemas. Esto no
          debería ocurrir nunca, ya que el fichero de descripción
          nunca cambia una vez que la tabla se crea:
        
Restaure el fichero de descripción desde una copia de seguridad y vuelva a la Etapa 3. También puede restaurar el fichero índice y volver a la Etapa 2. En este último caso, puede comenzar con myisamchk -r.
              Si no tiene una copia de seguridad pero sabe exactamente
              cómo se creó la tabla, cree una copia de la tabla en
              otra base de datos. Borre el nuevo fichero de datos, luego
              mueva los ficheros .frm de
              descripción y .MYI de indexación
              desde la otra base de datos a la base de datos que tiene
              problemas. Esto le da unos nuevos ficheros de descripción
              e indexación, pero deja el fichero de datos
              .MYD solo. Vuelva a la Etapa 2 y
              trate de reconstruir el fichero de indexación.
            
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

