2011-01-03 30 views
88

¿Cómo verificar todas las tablas en la base de datos de una vez?Reparar todas las tablas 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 all o algo por el estilo?

Respuesta

3

No hay un comando predeterminado para hacer eso, pero puede crear un procedimiento para hacer el trabajo. Va a recorrer las filas de information_schema y llamar al REPAIR TABLE 'tablename'; para cada fila. CHECK TABLE aún no es compatible con las declaraciones preparadas. Aquí está el ejemplo (sustituir 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 
14
select concat('repair table ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase'; 

Para 'mydatabase' utilizar su nombre DB.

+16

Um, esto en realidad no repara las tablas. Simplemente imprime la cadena 'repair table table_name' para cada tabla. – naught101

+2

¡Pero funciona bien! Acabo de copiar el resultado y lo ejecuté como consulta SQL. – Redax

+0

Esto me salvó más de una hora. – redolent

81

El comando es la siguiente:

mysqlcheck -u root -p --auto-repair --check --all-databases 

Debe proporcionar la contraseña cuando se le preguntó,

o puede ejecutar este, pero no es recomendable ya que la contraseña se escribe en texto claro:

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

mysqlcheck -u root -p --auto-repair --check --optimize --todas las bases de datos Error: mysqlcheck no es compatible con múltiples comandos contradictorios – Alekc

+0

Recibí el mismo error que Alekc –

+10

Si obtiene los comandos contradictorios error , saca la opción --optimize. – Sarcastron

1

me gusta esto por un simple control de la cáscara:

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

puede usar 'mysql -ss' para omitir los nombres de las columnas de la salida, esto permitiría eliminar' NR! = 1' de su código – Fluffy

6

El siguiente comando funcionó para mí el símbolo del sistema (modo de administrador) en Windows:

mysqlcheck -u root -p -A --auto-repair 

Run mysqlcheck con el usuario root, solicite una contraseña, se les presentarán todas las bases de datos, y auto-reparación de cualquier tablas corruptas.

Cuestiones relacionadas