一次修复所有表

AMD*_*AMD 107 mysql sql

如何一次性检查数据库中的所有表?

而不是check table ''tablename'';逐个键入所有表的查询.

有没有像这样的简单命令check all

Con*_*enu 100

命令是这样的:

mysqlcheck -u root -p --auto-repair --check --all-databases
Run Code Online (Sandbox Code Playgroud)

您必须提供密码,

或者你可以运行这个,但不建议这样做,因为密码是用明文写的:

mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
Run Code Online (Sandbox Code Playgroud)

  • 如果您收到矛盾的命令错误,请取出--optimize选项. (11认同)
  • mysqlcheck -u root -p --auto-repair --check --optimize --all-databases错误:mysqlcheck不支持多个矛盾的命令 (7认同)

小智 22

使用以下查询来打印REPAIR数据库中所有表的SQL语句:

select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables 
where table_schema='mydatabase'; 
Run Code Online (Sandbox Code Playgroud)

之后复制所有查询并执行它mydatabase.

注意:替换mydatabase为所需的DB名称


con*_*att 8

以下命令使用Windows中的命令提示符(作为管理员)为我工作:

mysqlcheck -u root -p -A --auto-repair
Run Code Online (Sandbox Code Playgroud)

使用root用户运行mysqlcheck,提示输入密码,检查所有数据库,并自动修复任何损坏的表.


Cra*_*erb 6

无需输入密码,只需使用这些命令中的任何一个(自解释):

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
Run Code Online (Sandbox Code Playgroud)


St.*_*and 3

没有默认命令可以执行此操作,但您可以创建一个过程来完成此工作。它将遍历行information_schema并调用REPAIR TABLE 'tablename';每一行。CHECK TABLE尚未支持准备好的语句。这是示例(将 MYDATABASE 替换为您的数据库名称):

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
Run Code Online (Sandbox Code Playgroud)