Gu1*_*234 154
从命令行,您可以使用:
mysqlcheck -A --auto-repair
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.html
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)
小智 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名称
以下命令使用Windows中的命令提示符(作为管理员)为我工作:
mysqlcheck -u root -p -A --auto-repair
Run Code Online (Sandbox Code Playgroud)
使用root用户运行mysqlcheck,提示输入密码,检查所有数据库,并自动修复任何损坏的表.
无需输入密码,只需使用这些命令中的任何一个(自解释):
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
Run Code Online (Sandbox Code Playgroud)
没有默认命令可以执行此操作,但您可以创建一个过程来完成此工作。它将遍历行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)