Cuando se trata de la corrupción de bases de datos MySQL, si el archivo de índice MYI no se encuentra o está dañado si su encabezado no se puede utilizar un comando myisamchk:¿Cómo se pueden reparar todas las tablas en todas las bases de datos desde el símbolo del sistema de MySQL cuando el archivo MYI está dañado o falta?
myisamchk --safe-recover --force --sort_buffer_size=2G --key_buffer_size=2G /var/lib/mysql/*/*.MYI
Tienes que hacer la reparación desde la línea de comandos de MySQL con la opción USE_FRM:
repair tbl_name use_frm;
por MySQL documentation's on repairing tables
el USE_FRM opción está disponible para su uso si el archivo de índice .MYI es missin g o si su encabezado está dañado. Esta opción le dice a MySQL que no confíe en la información del encabezado del archivo .MYI y que vuelva a crearla con la información del archivo .frm. Este tipo de reparación no se puede hacer con myisamchk.
Con demyisamchk, que puede caer fácilmente en cada carpeta de base de datos y reparar cada tabla mediante asteriscos al final del comando:
/var/lib/mysql/*/*.MYI
No se puede hacer nada parecido desde la línea de comandos de MySQL.
Hay una pregunta StackOverflow con una respuesta que explica how to repair all tables within one specific database from the MySQL command prompt with a procedure:
CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
DECLARE endloop INT DEFAULT 0;
DECLARE tableName char(100);
DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;
OPEN rCursor;
FETCH rCursor INTO tableName;
WHILE endloop = 0 DO
SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
PREPARE statement FROM @sql;
EXECUTE statement;
FETCH rCursor INTO tableName;
END WHILE;
CLOSE rCursor;
END
¿Es posible modificar un procedimiento como este para recorrer todos sus bases de datos MySQL y reparar todas las mesas dentro de esas bases de datos?
Creo que esto podría ser útil para cualquiera que tenga una gran cantidad de bases de datos y se encuentre con serios daños.
¿Fue realmente necesario su comentario sarcástico? Estoy en una situación donde no es factible en el futuro predecible cambiar a InnoDB. – Drew