子查询 MYSQL 到 select 来自服务器的所有数据库

Subquerying MYSQL to select All Databases from server

我在提问之前查看了this主题,我发现它只是在某一点上有帮助,现在还不够。

我在 MariaDB 服务器中有很多数据库,其中一个注册的视图损坏了,给我 "Invalid references" 错误。

我需要的是找出损坏的视图,考虑到这个错误阻止我 运行 我的备份例程,而 MariaDB 日志只显示 "Database (Got error: 1049) (Locktable)"

现在我有了我的观点列表,有没有办法在不同的数据库中 "select *" 所有这些观点?

我试过这样的事情:

select *  from TABLE_SCHEMA where (select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_TYPE like 'VIEW');

但我知道它不会工作,因为我没有提供特定的数据库。

我认为内部联接可以解决这种情况,但我不知道如何完成...

顺便说一句,如果有更好的方法来找出View有缺陷,我将不胜感激。

提前致谢!

由于唯一的答案被它的贡献者删除了,我开发了一个丑陋但有效的解决方法:

  1. 我使用下面提供的查询创建了一个包含数据库和视图名称的文件:

mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > views.txt

  1. 这会将包含我需要的信息的流程保存到文件 "views.txt" 运行 视图中的基本 Select,因此我执行了以下操作:

while IFS= read -r line; do mysql -p*** -e "select * from $(echo $line | awk '{print }').$(echo $line | awk '{print }') LIMIT 1" 2>> errors.txt; echo $line >> errors.txt; done < views.txt

我知道这很丑陋,但它会在 "views.txt" 中列出的每个 database.table 或 database.view 中 运行 一个 "select *",只返回第一行这个查询。

它在我的服务器中提供了一个有效的测试,它告诉我哪个视图被破坏了:

ERROR 1146 (42S02) at line 1: Table '.' doesn't exist

如果您遇到类似的问题,希望您能找到更好的解决方法。