一次修理所有表格

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

而不是input查询check table ''tablename''; 所有的桌子一个接一个。

有没有像check all或类似的简单命令?

从命令行你可以使用:

 mysqlcheck -A --auto-repair 

http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.html

命令是这样的:

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

询问时必须提供密码,

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

 mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases 
 select concat('repair table ', table_name, ';') from information_schema.tables where table_schema='mydatabase'; 

对于'mydatabase'使用你的数据库名称。

以下命令在Windows中使用命令提示符(以pipe理员身份)工作:

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

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

没有默认的命令来做这件事,但你可以创build一个程序来完成这项工作。 它将遍历information_schema行并调用REPAIR TABLE 'tablename'; 为每一行。 CHECK TABLE目前还不支持预处理语句。 这里是例子(用您的数据库名称replaceMYDATABASE):

 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 

我喜欢这个从shell中进行简单的检查:

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