support - reparar base de datos mysql windows
Reparar todas las tablas de una vez (8)
¿Cómo verificar todas las tablas en la base de datos de una vez?
En lugar de escribir la check table ''''tablename'''';
consulta check table ''''tablename'''';
para todas las tablas una a una.
¿Hay algún comando simple como check all
o algo así?
El comando es este:
mysqlcheck -u root -p --auto-repair --check --all-databases
Debe proporcionar la contraseña cuando se le solicite,
o puede ejecutar este pero no se recomienda porque la contraseña está escrita en texto claro:
mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
El siguiente comando funcionó para mí usando el símbolo del sistema (como administrador) en Windows:
mysqlcheck -u root -p -A --auto-repair
Ejecute mysqlcheck con el usuario raíz, solicite una contraseña, verifique todas las bases de datos y repare automáticamente las tablas dañadas.
Me gusta esto para un simple control del caparazón:
mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE ''User%''" /
| awk ''NR != 1 {print "CHECK TABLE "$1";"}'' /
| mysql -p<password> -D<database>
No es necesario escribir la contraseña, solo use uno de estos comandos (que se explica por sí mismo):
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
No hay un comando predeterminado para hacer eso, pero puede crear un procedimiento para hacer el trabajo. Recorrerá las filas de information_schema
y llamará a REPAIR TABLE ''tablename'';
por cada fila CHECK TABLE
aún no es compatible con las declaraciones preparadas. Aquí está el ejemplo (reemplace MYDATABASE con su nombre de base de datos):
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
Use la siguiente consulta para imprimir las declaraciones de REPAIR
SQL para todas las tablas dentro de una base de datos:
select concat(''REPAIR TABLE '', table_name, '';'') from information_schema.tables
where table_schema=''mydatabase'';
Después de eso, copie todas las consultas y ejecútelas en mydatabase
.
Nota: reemplace mydatabase
por el nombre de base de datos deseado
desde la línea de comando puedes usar:
mysqlcheck -A --auto-repair
para hosts plesk, uno de ellos debería hacer: (ambos hacen lo mismo)
mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A