Repair all tables in one go

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

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

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

294827 次浏览

没有这样做的默认命令,但是您可以创建一个过程来完成这项工作。 It will iterate through rows of information_schema and call REPAIR TABLE 'tablename'; for every row. CHECK TABLE is not yet supported for prepared statements. Here's the example (replace MYDATABASE with your database name):

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

在命令行中,您可以使用:

mysqlcheck -A --auto-repair

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

使用以下查询为数据库中的所有表打印 REPAIRSQL 语句:

select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables
where table_schema='mydatabase';

然后复制所有查询并在 mydatabase上执行它。

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

The command is this:

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

当被问及时,您必须提供密码,

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

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

我喜欢这个简单的 shell 检查:

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

下面的命令在 Windows 中使用命令提示符(作为管理员)对我有效:

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

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

不需要输入密码,只需使用以下任何一个命令(不言而喻) :

mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize

对于 plesk 主机,其中一个应该执行: (两个都执行相同的操作)

mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A

您可能需要用户名和密码:

mysqlcheck -A --auto-repair -uroot -p

系统会提示您输入密码。

mysqlcheck -A --auto-repair -uroot -p\{\{password here}}

如果您想放入 cron,但您的密码将以纯文本显示!

如果损坏的表在

mysqlcheck -A --auto-repair

试试看

mysqlcheck -A --auto-repair --use-frm