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í?

AMD
fuente

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
Constantin Galbenu
fuente
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

SenthilKumar
fuente
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
Serbio loco
fuente
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.

contactmatt
fuente
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
San Woland
fuente
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>
Jerrygarciuh
fuente
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
sjas
fuente
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!

Mike Zriel
fuente
1

Si quedan tablas dañadas después

mysqlcheck -A --auto-repair

tratar

mysqlcheck -A --auto-repair --use-frm
Laloi
fuente
¿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