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?

CryptoMiningPoolSetupYiimp
fuente
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
Aleksandar Vucetic
fuente
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.

cREcker
fuente
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>
crazycrv
fuente
4

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

REPAIR TABLE <table_name> USE_FRM;
marca
fuente
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
ThorstenS
fuente
2

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

Humbertosmos
fuente
¿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

cryptox1
fuente
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
usuario3417257
fuente