Pull to refresh

Compalex: сравнение схем двух баз данных

Reading time 3 min
Views 37K
Предположим, у вас есть 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)

$ 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/.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+16
Comments 27
Comments Comments 27

Articles