一次修理所有表格
如何一次检查数据库中的所有表?
而不是input查询check table ''tablename'';
所有的桌子一个接一个。
有没有像check all
或类似的简单命令?
命令是这样的:
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>