Nosotros (aparentemente) tuvimos una mala ejecución de nuestro motor de base de datos MySQL Solaris anoche. Al menos algunas de las tablas InnoDB están dañadas, con errores de marca de tiempo fuera de orden en el registro de transacciones, y un error específico sobre el índice está dañado.
Conocemos las herramientas disponibles para la reparación de tablas MyISAM, pero no encontramos nada para InnoDB.
Nota al margen: al intentar optimizar una tabla (en mi intento de reconstruir el índice dañado), el servidor de base de datos se bloquea.
detenga su aplicación...o detenga su esclavo para que no se añadan nuevas filas
create table <new table> like <old table>;
insert <new table> select * from <old table>;
truncate table <old table>;
insert <old table> select * from <new table>;
reinicie su servidor o esclavo
La siguiente solución está inspirada en el consejo de Sandro.
Advertencia: mientras que funcionó para mí, pero no puedo decir si va a trabajar para usted.
Mi problema era el siguiente: leer algunas filas específicas de una tabla (llamémosla broken
) bloqueaba MySQL. Incluso SELECT COUNT(*) FROM broken
lo mataba. Espero que tengas una PRIMARY KEY
en esta tabla (en el siguiente ejemplo, es id
).
CREAR TABLA broken_repair LIKE broken;
INSERT broken_repair SELECT * FROM broken WHERE id NOT IN (SELECT id FROM broken_repair) LIMIT 1;
LIMIT 100000
y luego usar valores menores, hasta que usando LIMIT 1
se bloquee la BD).SELECT MAX(id) FROM broken
con el número de filas en broken_repair
).OFFSET
al LIMIT
.Mucha suerte.