Предположим, у вас есть prod и test базы данных. В какой-то момент разработчик внес изменения в тестовую базу, но забыл внести эти изменения в боевую базу. Если это часто используемая таблица, то ситуация очень быстро становится очевидной, так как в логах появятся ошибки в SQL-запросах и вам начинает звонить начальник с упреками «какого @#$%».
Но иногда изменения затрагивают редко используемые таблицы, либо изменения на первый взгляд не совсем очевидны (например, кто-то изменил длину поля VARCHAR и у вас стали обрезаться строки, или кто-то добавил индекс, из-за которого запросы на тестовой базе выполняются на порядок быстрее).
Еще вариант — вы провели обновление ПО и у вас все перестало работать. Куча непонятных ошибок на пустом месте, приложение лежит, пользователи не довольны.
В таких случаях бывает очень полезно посмотреть чем же отличаются базы и сделать соответствующие выводы.
Что приходит на ум? Делаем dump структуры одной базы, потом другой. Запускаем diff-утилиту и она показывает строки, которые отличаются в двух дампах. Для небольших изменений это может сработать. Но, во-первых, это несколько утомительно, во-вторых, может получиться ситуация как на скриншоте, когда в одной базе отсутствует таблица и diff начинает сравнивать разные таблицы.
Столкнувшись с указанными проблемами, я написал небольшой php-скрипт (https://github.com/dlevsha/compalex), который работает с MySQL, MS SQL Server, PostgreSQL (в планах поддержка Oracle) и позволяет сравнить две базы данных. Скрипт не тянет за собой никаких зависимостей, что упрощает его установку и поддержку.
Для работы необходимо установить сам скрипт (предполагается что php >= 5.4 с поддержкой PDO у вас уже установлен, если нет — то в debian / ubuntu это делается одной строчкой aptitude install php5, единственное — смотрите, чтобы был установлен php версии не ниже 5.4)
Открываем .environment в папке проекта и правим параметры.
Выбираем драйвер DATABASE_DRIVER из поддерживаемых 'mysql', 'pgsql', 'dblib'
Правим настройки, отвечающие за подключение к первой и второй базе данных соответственно
Для того, чтобы не запутаться где какая база данных — даем им имена в параметрах DATABASE_DESCRIPTION
После этого, находясь в папке проекта, запускаем web-сервер
и открываем в браузере http://localhost:8000/
Должна отобразиться схема-сравнение, состоящая из двух колонок, в соответствии с указанными параметрами баз данных.
Назначения элементов изображено на схеме.
Иногда нет возможности организовать прямое локальное подключение к базам данных и изменения необходимо посмотреть прямо на сервере из консоли.
Для этих целей я рекомендую использовать консольный браузер eLinks, который поддерживает HTML-форматирование и цвета в разметке.
Необходимо установить скрипт на сервере, запустить web-сервер (как это описано выше) и выполнить:
Получим примерно следующее:
Более подробная информация на сайте (на английском) http://compalex.net/.
Здесь можно попробовать как все это работает http://demo.compalex.net/.
Но иногда изменения затрагивают редко используемые таблицы, либо изменения на первый взгляд не совсем очевидны (например, кто-то изменил длину поля VARCHAR и у вас стали обрезаться строки, или кто-то добавил индекс, из-за которого запросы на тестовой базе выполняются на порядок быстрее).
Еще вариант — вы провели обновление ПО и у вас все перестало работать. Куча непонятных ошибок на пустом месте, приложение лежит, пользователи не довольны.
В таких случаях бывает очень полезно посмотреть чем же отличаются базы и сделать соответствующие выводы.
Что приходит на ум? Делаем dump структуры одной базы, потом другой. Запускаем diff-утилиту и она показывает строки, которые отличаются в двух дампах. Для небольших изменений это может сработать. Но, во-первых, это несколько утомительно, во-вторых, может получиться ситуация как на скриншоте, когда в одной базе отсутствует таблица и diff начинает сравнивать разные таблицы.
Столкнувшись с указанными проблемами, я написал небольшой php-скрипт (https://github.com/dlevsha/compalex), который работает с MySQL, MS SQL Server, PostgreSQL (в планах поддержка Oracle) и позволяет сравнить две базы данных. Скрипт не тянет за собой никаких зависимостей, что упрощает его установку и поддержку.
Для работы необходимо установить сам скрипт (предполагается что php >= 5.4 с поддержкой PDO у вас уже установлен, если нет — то в debian / ubuntu это делается одной строчкой aptitude install php5, единственное — смотрите, чтобы был установлен php версии не ниже 5.4)
$ git clone https://github.com/dlevsha/compalex.git
$ cd compalex
Открываем .environment в папке проекта и правим параметры.
[ Main settings ]
; Possible DATABASE_DRIVER: 'mysql', 'pgsql', 'dblib'.
; Please use 'dblib' for Microsoft SQL Server
DATABASE_DRIVER = mysql
DATABASE_ENCODING = utf8
SAMPLE_DATA_LENGTH = 100
[ Primary connection params ]
DATABASE_HOST = localhost
DATABASE_NAME = compalex_dev
DATABASE_USER = login
DATABASE_PASSWORD = password
DATABASE_DESCRIPTION = Developer database
[ Secondary connection params ]
DATABASE_HOST_SECONDARY = localhost
DATABASE_NAME_SECONDARY = compalex_prod
DATABASE_USER_SECONDARY = login
DATABASE_PASSWORD_SECONDARY = password
DATABASE_DESCRIPTION_SECONDARY = Production database
Выбираем драйвер DATABASE_DRIVER из поддерживаемых 'mysql', 'pgsql', 'dblib'
Правим настройки, отвечающие за подключение к первой и второй базе данных соответственно
DATABASE_HOST = localhost
DATABASE_NAME = compalex_dev
DATABASE_USER = root
DATABASE_PASSWORD = password
Для того, чтобы не запутаться где какая база данных — даем им имена в параметрах DATABASE_DESCRIPTION
После этого, находясь в папке проекта, запускаем web-сервер
$ php -S localhost:8000
и открываем в браузере http://localhost:8000/
Должна отобразиться схема-сравнение, состоящая из двух колонок, в соответствии с указанными параметрами баз данных.
Назначения элементов изображено на схеме.
Иногда нет возможности организовать прямое локальное подключение к базам данных и изменения необходимо посмотреть прямо на сервере из консоли.
Для этих целей я рекомендую использовать консольный браузер eLinks, который поддерживает HTML-форматирование и цвета в разметке.
Необходимо установить скрипт на сервере, запустить web-сервер (как это описано выше) и выполнить:
$ elinks http://localhost:8000
Получим примерно следующее:
Более подробная информация на сайте (на английском) http://compalex.net/.
Здесь можно попробовать как все это работает http://demo.compalex.net/.