一次检查所有 MySQL 表

Ben*_*rel 3 mysql

我想CHECK TABLE从 MySQL 命令行在我的所有表上运行。

我可以为单个表执行此操作:

mysql> check table Restaurant;
+--------------------+-------+----------+----------+
| Table              | Op    | Msg_type | Msg_text |
+--------------------+-------+----------+----------+
| foodbox.Restaurant | check | status   | OK       |
+--------------------+-------+----------+----------+
1 row in set (0.02 sec)
Run Code Online (Sandbox Code Playgroud)

是否有等效的命令可以检查当前数据库中的所有表

Cra*_*ein 5

您可以使用 shell 脚本简化您的生活。这是我为 Linux 创建的一个,它基于mysqlcheck应用程序

此脚本将检查除 mysql 和 information_schema 之外的所有数据库中的所有表

vi check_all_databases.sh

#!/bin/bash
USER=root
Port=3306
PASSWD=password

DBS="$(/usr/bin/mysql --connect_timeout 10 -u $USER -P $Port -p$PASSWD -Bse 'SHOW DATABASES')"
for db in $DBS
        do
                if [ "$db" != "mysql" ] && [ "$db" != "information_schema" ];
                then
                        /usr/bin/mysqlcheck -u $USER -p$PASSWD -c $db
                fi
        done
Run Code Online (Sandbox Code Playgroud)

保存文件

\wq
Run Code Online (Sandbox Code Playgroud)

然后执行它

sh check_all_databases.sh

dbt2.customer                                      OK
dbt2.district                                      OK
dbt2.history                                       OK
dbt2.item                                          OK
dbt2.new_order                                     OK
dbt2.order_line                                    OK
dbt2.orders                                        OK
Run Code Online (Sandbox Code Playgroud)

对于 Windows,您将使用批处理脚本或 vbs 来做同样的事情。

另一种选择是为您有兴趣检查的一个数据库运行 mysqlcheck 应用程序。

/path/to/mysqlcheck -u 用户名 -pPASSWORD -c 数据库名称

mysqlcheck 将位于您安装 mysql 二进制文件的目录中。

在 Linux 中,您可以使用 which 命令来定位它

which mysqlcheck
Run Code Online (Sandbox Code Playgroud)