如何在所有具有“正在使用”的数据库中搜索 table

How to search in all databases having `in use` table

我的数据库服务器最近坏了,我服务器里有300多个数据库。

我现在的做法是运行phpmyadmin,所有的数据库一一检查,看有没有至少一个数据库有in usecollation 恢复。

如何在所有数据库中搜索 collation 并且 table 在 collation 中至少有一个 in use

服务器是CentOS 7,我有root权限。如果需要,我可以 运行 PHP 编写脚本,如果你能帮助我 PHP。

更新 1

直到现在我发现我应该运行这些查询来使用数据库并显示table状态:

Use DatabaseName;
show TABLE STATUS;

它显示所有 table 的状态,包括损坏的状态:

| 2022-04-05 20:31:19 | utf8_persian_ci   |     NULL |                |                                                                  | 288230376151710720 | N         |
| users            | NULL   |    NULL | NULL       | NULL |           NULL |        NULL |              NULL |         NULL |      NULL |           NULL | NULL                | NULL| NULL                | NULL              |     NULL | NULL           | Table 'db_name.users' doesn't exist in engine            |               NULL | NULL      |

我需要 grep 或将其通过管道传输到另一个文件以检查并列出所有文件。

您可以修改此 shell 脚本以供您使用:

mysql -N 抑制 header grep -v E "..|.." 排除系统数据库

root@localhost:~# mysql -N -e "SHOW DATABASES" | grep -v -E "mysql|information_schema|performance_schema" |
> while read dbs
> do
>   echo "CHECK DATABASE " $dbs
>. # your command
> done

输出:

CHECK DATABASE  bernd
CHECK DATABASE  sys

有 2 个命令:

mysql -N -e "SHOW DATABASES" | grep -v -E "mysql|information_schema|performance_schema" |
while read dbs
do
  echo "CHECK DATABASE " $dbs;
  mysql -N -e "USE $dbs; SHOW TABLE STATUS;"
done