子服务MYSQL从服务器

时间:2015-09-30 18:48:38

标签: mysql view inner-join mariadb

我在询问之前已经检查了this主题,并且我发现它在某一点上很有用,现在还不够。

我在MariaDB服务器中有很多数据库,其中一个已注册的视图被破坏,给我“无效的引用”错误。

我需要的是找出View被破坏的内容,考虑到此错误阻止我运行我的备份例程,而MariaDB日志仅显示“数据库(获取错误:1049)(可锁定)”

现在我有一个我的观点列表,有没有办法在不同的数据库中“选择*”所有这些?

我尝试过这样的事情:

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

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

我认为Inner-Join会解决这个问题,但我无法弄清楚如何实现它......

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

  1. 我使用下面提供的查询创建了一个包含数据库和视图名称的文件:
  2. mysql -p*** -e "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.`TABLES` WHERE TABLE_TYPE LIKE 'VIEW'" > views.txt

    1. 这将保存到文件" views.txt"我需要在视图中运行基本选择所需的信息的流程,所以我做了以下内容:
    2. while IFS= read -r line; do mysql -p*** -e "select * from $(echo $line | awk '{print $1}').$(echo $line | awk '{print $2}') LIMIT 1" 2>> errors.txt; echo $line >> errors.txt; done < views.txt

      我知道它很难看,但它会运行一个&#34;选择*&#34;在&#34; views.txt&#34;中列出的每个database.table或database.view中,仅返回此查询的第一行。

      它在我的服务器中为我提供了一个有效的测试,它向我展示了哪些视图被破坏了:

        

      ERROR 1146(42S02)第1行:表&#39;。&#39;不存在

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