La tabla MySQL está marcada como bloqueada y la última reparación (¿automática?) Falló


126

Estaba reparando esta tabla de repente, el servidor se colgó y cuando regresé, todas las tablas están bien, pero esta muestra 'en uso' y cuando intento repararla no continúa.

ERROR 144: la tabla './extas_d47727/xzclf_ads' está marcada como bloqueada y la última reparación (¿automática?) Falló

¿Qué puedo hacer para repararlo?


1
He visto que esto sucede principalmente cuando el sistema de archivos subyacente se queda sin inodos libres. Consulte con df -hi. Por lo general, algo lo está llenando con un montón de archivos pequeños, como por ejemplo archivos de sesión php que no se limpian.
Zrin

Respuestas:


260

Si su proceso MySQL se está ejecutando, deténgalo. En Debian:

sudo service mysql stop

Ve a tu carpeta de datos. En Debian:

cd /var/lib/mysql/$DATABASE_NAME

Intenta correr:

myisamchk -r $TABLE_NAME

Si eso no funciona, puedes probar:

myisamchk -r -v -f $TABLE_NAME

Puede iniciar su servidor MySQL nuevamente. En Debian:

sudo service mysql start

3
Intenté el comando anterior. Recibo este error. No se puede crear un nuevo archivo temporal: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Bueno, ¿el disco está realmente lleno? ¿Puedes intentar ejecutar "df -h"? Lo más probable es que debas liberar algo de espacio ... Durante la reparación de la tabla, usa algo de espacio en disco para escribir en la tabla temporal. Como puede ver en el mensaje de error que escribe en su carpeta / tmp /
Aleksandar Vucetic

13
Tuve que navegar /var/lib/mysql/<database>y correr myisamchk -r -v -f ./<table name>.
Linus Oleander

55
Tengo un myisam_sort_buffer_size is too smallerror, por lo que este comando funcionó para mí:myisamchk -r -v --sort_buffer_size=2G <table_name>
Dusan

1
Wow, pensé que todo mi sitio web estaba manguera. Una solución tan simple. ¡Eres mi héroe!
Anthony

105

Intente ejecutar la siguiente consulta:

repair table <table_name>;

Tuve el mismo problema y me resolvió el problema.


Esta fue una solución rápida! Tenía una tabla de opciones "malas". ¡Asegúrese de seleccionar primero la base de datos correcta!
jyllstuart

12

Si le da permiso denegación mientras se mueve a / var / lib / mysql, use la siguiente solución

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>

4

Necesitaba agregar USE_FRM a la declaración de reparación para que funcione.

REPAIR TABLE <table_name> USE_FRM;

3

Tengo myisamchk: error: myisam_sort_buffer_size is too smallcomo error.

La solución

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

Vaya data_diry elimine el Your_table.TMParchivo después de reparar la <Your_table>tabla.


¿Dónde está data_dir?
CMCDragonkai

1
búscalo con este comando grep -r datadir /etc/mysql/. Debería estar /var/lib/mysqlbajo Debian y Ubuntu.
ThorstenS

1

Esta es una solución 100%. Lo intenté yo mismo.

myisamchk -r -v -f --sort_buffer_size = 128M --key_buffer_size = 128M / var / lib / mysql / databasename / tabloname


0

Probé las opciones en las respuestas existentes, principalmente la marcada correcta que no funcionó en mi escenario. Sin embargo, lo que sí funcionó fue usar phpMyAdmin. Seleccione la base de datos y luego seleccione la tabla, en el menú desplegable inferior seleccione "Reparar tabla".

  • Tipo de servidor: MySQL
  • Versión del servidor: 5.7.23 - MySQL Community Server (GPL)
  • phpMyAdmin: Información de la versión: 4.7.7
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.