如何在MySQL服务器上搜索所有数据库中的单个信息字符串?

4

我有大约150个不同的数据库,每个服务器上都有数十个表。我想查找一个特定人名所在的数据库。现在,我正在使用phpmyadmin逐个搜索每个数据库,但我真的希望能够一次性搜索所有数据库和所有表。这可能吗?我该如何做?

3个回答

2
一种解决方案是使用`information_schema`数据库,列出所有数据库、所有表、所有字段,并循环遍历所有内容...。
有这样一个脚本可以帮助完成部分工作:anywhereindb(引用):
这段代码在MYSQL数据库中搜索所有表和所有行和列。代码是用PHP编写的。为了更快的结果,我们只搜索varchar字段。
但正如Harmen所指出的那样,这仅适用于一个数据库--这意味着您必须将某些内容包装起来,以循环遍历服务器上的每个数据库。
有关更多信息,请查看第19章 INFORMATION_SCHEMA表;特别是SCHEMATA表,其中包含服务器上所有数据库的名称。
这里还有另一种解决方案,基于存储过程--这意味着客户端/服务器调用较少,可能会更快:http://kedar.nitty-witty.com/miscpages/mysql-search-through-all-database-tables-columns-stored-procedure.php

150个不同的数据库!= 150个不同的表。Anywhereindb只能在一个数据库中搜索。 - Harmen
嗯;真的吗:-( 我会编辑我的帖子,加上一些关于那个的话;感谢你的评论! - Pascal MARTIN

0

正确的做法是首先对数据进行规范化!

你说名字 - 但大多数人至少有两个名字(姓和名),它们被拆分还是在同一个字段中?如果它们在同一个字段中,那么它们出现的顺序是什么?它们如何大写?

尝试确定数据可能在哪里的最有效方法是编写一个C程序,在关闭DBMS的情况下筛选原始数据文件以查找数据 - 但这只会告诉您它们出现在哪个表中。

如果失败,您需要编写一些PHP,通过每个数据库进行迭代('SHOW databases'的工作方式类似于select语句),然后遍历数据库中的每个表,然后生成一个SELECT语句,过滤每个足够大以容纳您要查找的名称的CHAR或VARCHAR列(尝试运行'DESC $table')。

祝你好运。

C.


0

最好的答案可能取决于您想要多频繁地执行此操作。如果这是一周一次的临时性工作,那么上面的答案就很好。

如果您想每秒钟进行一次这样的搜索,也许可以创建一个“数据仓库”数据库,其中只包含您想要搜索的表格:列(大量索引,并带有对源数据库的引用,如果需要的话),由cron job或由受150个数据库更改驱动的存储过程填充...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接