Repara todas las tablas de una vez


112

¿Cómo comprobar todas las tablas de la base de datos de una vez?

En lugar de escribir la consulta check table ''tablename'';para todas las tablas una por una.

¿Hay algún comando simple como check allo algo así?

Respuestas:



108

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 sin cifrar:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases

7
mysqlcheck -u root -p --auto-repair --check --optimize --all-database Error: mysqlcheck no admite múltiples comandos contradictorios
Alekc

11
Si obtiene el error de comandos contradictorios, elimine la opción --optimize.
Sarcastron

Supongo que debe usar una y solo una de estas opciones: reparación automática, verificación u optimización. Utilicé solo reparación automática y trabajé
Packet Tracer

Intenté lo que dijiste, pero obtengo: mysqlcheck: Obtuve el error: 1045: Acceso denegado para el usuario 'root' @ 'localhost' (usando contraseña: SÍ) cuando intento conectarme y sé que estoy usando la contraseña correcta.
Doug

24

Utilice la siguiente consulta para imprimir REPAIRdeclaraciones 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 mydatabase.

Nota: reemplace mydatabasecon el nombre de base de datos deseado


9

No es necesario escribir la contraseña, solo use cualquiera de estos comandos (se explica por sí mismo):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize

8

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 root, solicite una contraseña, verifique todas las bases de datos y repare automáticamente las tablas dañadas.


3

No hay un comando predeterminado para hacer eso, pero puede crear un procedimiento para hacer el trabajo. Iterará a través de filas de information_schemay llamará REPAIR TABLE 'tablename';a cada fila. CHECK TABLEaún no es compatible con declaraciones preparadas. Aquí está el ejemplo (reemplace MYDATABASE con el nombre de su 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

1

Me gusta esto para una simple verificación desde el shell:

mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>

1
que puede usar mysql -sspara omitir los nombres de las columnas de la salida; esto permitiría eliminarlos NR != 1de su código
Fluffy

1

para hosts plesk, uno de estos 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

1

Es posible que necesite nombre de usuario y contraseña:

mysqlcheck -A --auto-repair -uroot -p

Se le pedirá una contraseña.

mysqlcheck -A --auto-repair -uroot -p{{password here}}

Si desea poner cron, ¡PERO su contraseña será visible en texto plano!


1

Si quedan tablas dañadas después

mysqlcheck -A --auto-repair

tratar

mysqlcheck -A --auto-repair --use-frm

¿Qué hace -use-frm?
davidman77

--use-frm Para operaciones de reparación en tablas MyISAM, obtenga la estructura de la tabla del diccionario de datos para que la tabla pueda repararse incluso si el encabezado .MYI está dañado. (cf. dev.mysql.com/doc/refman/8.0/en/… )
Laloi
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.