子查询 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有缺陷,我将不胜感激。
提前致谢!
由于唯一的答案被它的贡献者删除了,我开发了一个丑陋但有效的解决方法:
- 我使用下面提供的查询创建了一个包含数据库和视图名称的文件:
mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > views.txt
- 这会将包含我需要的信息的流程保存到文件 "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
如果您遇到类似的问题,希望您能找到更好的解决方法。
我在提问之前查看了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有缺陷,我将不胜感激。
提前致谢!
由于唯一的答案被它的贡献者删除了,我开发了一个丑陋但有效的解决方法:
- 我使用下面提供的查询创建了一个包含数据库和视图名称的文件:
mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > views.txt
- 这会将包含我需要的信息的流程保存到文件 "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
如果您遇到类似的问题,希望您能找到更好的解决方法。