Cada fichero índice MyISAM
(.MYI
) tiene un contador en la cabecera
que puede usarse para chequear si una tabla se ha cerrado
correctamente. Si obtiene la siguiente advertencia de
CHECK TABLE
o myisamchk,
significa que el contador se ha desincronizado:
clients are using or haven't closed the table properly
Esta advertencia no significa necesariamente que la tabla esté corrupta, pero al menos debe chequear la tabla.
El contador funciona como se muesta:
La primera vez que se actualiza la hora de una tabla en MySQL, se incrementa un contador en la cabecera del fichero índice.
El contador no cambia durante otras actualizaciones.
Cuando se cierra la última instancia de una tabla (debido
a una operación FLUSH TABLES
o porque
no hay espacio en la caché de la tabla), el contador se
decrementa si la tabla se ha actualizado en cualquier
punto.
Cuando repara la tabla o chequea la tabla y está correcta, el contador se resetea a cero.
Para evitar problemas con interacciones con otros procesos que pueden chequear la tabla, el contador no se decrementea al cerrar si era cero.
En otras palabras, el contador puede desincronizarse sólo bajo las siguientes condiciones:
Las tablas MyISAM
se copian sin
ejecutar en primer lugar LOCK TABLES
y
FLUSH TABLES
.
MySQL falla entre una actualización y el cierre final. (Tenga en cuenta que la tabla puede estar ok, ya que MySQL siempre realiza escrituras entre cada comando.)
Una tabla se modifica con myisamchk --recover o myisamchk --update-state a la vez que se usa con mysqld.
Usando múltiples servidores mysqld
usando la tabla y un servidor realiza un REPAIR
TABLE
o CHECK TABLE
en la
tabla mientras estaba en uso por otro servidor. En este
caso, se puede usar CHECK TABLE
, aunque
puede obtener una advertencia de otros servidores. Sin
embargo, REPAIR TABLE
debe evitarse ya
que cuando un servidor reemplaza el fichero de datos con
uno nuevo, no se envía a los otros servidores.
En general, no es buena idea compartir un directorio de datos entre varios servidores. Consulte Sección 5.11, “Ejecutar más de un servidor MySQL en la misma máquina” para más informaicó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.