Esta sección explica como MySQL se comporta frente a errores de disco lleno (como “no space left on device”), y, a partir de MySQL 4.0.22, a errores de límite de cuota (como “write failed” o “user block limit reached”).
Esta sección es relevante para escrituras a tablas
MyISAM
. A paritr de MySQL 4.1.9, también se
aplica a las escrituras a archivos de registro binario y
también a sus índices, excepto por las referencias a
“row” y “record” que deberían
entenderse como “event.”
Cuando se llega a la situación de disco lleno, MySQL hace lo siguiente:
Comprueba una vez por minuto si hay suficiente espacio para escribir la fila actual. Si hay espacio, continua como si nada hubiese pasado.
Cada 10 minutos, escribe una entrada en el archivo de registro, avisando sobre la situación de disco lleno.
Para aliviar el problema, puede hacer lo siguiente:
Para continuar, lo único que tiene que hacer es liberar suficiente espacio en disco para insertar todos los registros.
Para abortar el hilo, debe utilizar el comando mysqladmin kill. El hilo se aborta la próxima vez que comprueba el disco (en un minuto).
Otros hilos podrían estar esperando a la tabla que causó la situación de disco lleno. Si tiene varios hilos bloqueados matar al que está esperando por la situación de disco lleno permite que los demás hilos puedan continuar.
Hay excepciones al comportamiento descrito previamente, como
cuando utiliza REPAIR TABLE
o
OPTIMIZE TABLE
, o cuando los índices son
creados en batch tras la sentencia LOAD DATA
INFILE
o la sentencia ALTER TABLE
.
Todas estas sentencias podrían crear grandes archivos
temporales que, si se dejan a su suerte, podrían causar enormes
problemas para el resto del sistema. Si el disco se llena
mientras MySQL está haciendo alguna de estas operaciones,
elimina el archivo temporal grande y marca la tabla como
corrupta. La excepción es que con ALTER
TABLE
, la tabla antigua se deja tal como estaba, sin
cambios.
É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.