Как я могу искать все базы данных на моем сервере MySQL для единственной строки информации - PullRequest
4 голосов
/ 25 февраля 2010

У меня есть около 150 различных баз данных с десятками таблиц на одном из моих серверов. Я смотрю, какая база данных содержит имя конкретного человека. Прямо сейчас я использую phpmyadmin для поиска в каждой базе данных по отдельности, но мне бы очень хотелось иметь возможность искать все базы данных и все таблицы одновременно. Это возможно? Как бы я поступил так?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2010

Решением было бы использовать базу данных information_schema, чтобы перечислить всю базу данных, все таблицы, все поля и выполнить цикл по всему этому ...


Вот этот скрипт, который может помочь хотя бы в какой-то части работы: whereindb (цитирование) :

Этот код ищет все таблицы и все строки и столбцы в MYSQL База данных. Код написан на PHP. Для более быстрого результата мы только поиск в поле varchar.

Но, как отметил Хармен, это работает только с одной базой данных - это означает, что вам придется обернуть что-то вокруг нее, чтобы перебрать каждую базу данных на вашем сервере.

Для получения дополнительной информации об этом смотрите Глава 19. INFORMATION_SCHEMA Таблицы ; особенно таблица SCHEMATA, которая содержит имена всех баз данных на сервере.


Вот еще одно решение, основанное на хранимых процедурах, что означает меньшее количество вызовов клиент / сервер, что может сделать его быстрее: колонки-запасенной procedure.php

0 голосов
/ 02 марта 2010

Лучший ответ, вероятно, зависит от того, как часто вы хотите это сделать. Если это раз в неделю, то вышеприведенные ответы хороши.

Если вы хотите выполнять такой поиск один раз в секунду, возможно, создайте базу данных «хранилище данных», содержащую только таблицу: столбцы, которые вы хотите найти (сильно индексированные, со ссылкой на исходную базу данных, если необходимо) заполняется заданием cron или хранимыми процедурами, вызванными изменениями в 150 базах данных ...

0 голосов
/ 25 февраля 2010

Правильный путь - это НОРМАЛИЗАЦИЯ ваших данных в первую очередь !!!

Вы говорите имя - но у большинства людей есть как минимум 2 имени (фамилия и имя), они разделены или находятся в одном поле? Если они находятся в одном поле, то в каком порядке они появляются? как они пишутся с заглавной буквы?

Самый эффективный способ попытаться определить, где могут находиться данные, - написать программу на C, которая сортирует файлы необработанных данных (пока СУБД выключена) в поисках данных - но это только скажет вам, что стол, в котором они появляются.

В противном случае вам нужно написать некоторый PHP, который выполняет итерацию по каждой базе данных («SHOW database» работает во многом как оператор выбора), затем выполняет итерацию по каждой таблице в базе данных, затем генерирует фильтрацию оператора SELECT для каждого столбца CHAR или VARCHAR достаточно большой, чтобы вместить искомое имя (попробуйте запустить 'DESC $ table').

Удачи.

С

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...