Русский
Русский
English
Статистика
Реклама

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

При разработке приложений иногда возникает потребность в сравнении двух баз данных (например prod и dev).

Существует ряд подходов для решения этого вопроса - от создания dump-файла со структурой db и последующим использованием diff, до использования специализированных платных решений типа dbForge или RedGate (большой список здесь).

Одним из таких решений, сочетающих бесплатность и удобство использования, является Compalex.

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

Для запуска контейнера необходимо указать:

docker run -it -e DATABASE_DRIVER='mysql' \-e DATABASE_ENCODING='utf8' \-e SAMPLE_DATA_LENGTH='100' \-e DATABASE_HOST='host.docker.internal' \-e DATABASE_PORT='3306' \-e DATABASE_NAME='compalex_dev' \-e DATABASE_USER='root' \-e DATABASE_PASSWORD='password' \-e DATABASE_DESCRIPTION='Developer database' \-e DATABASE_HOST_SECONDARY='host.docker.internal' \-e DATABASE_PORT_SECONDARY='3306' \-e DATABASE_NAME_SECONDARY='compalex_prod' \-e DATABASE_USER_SECONDARY='root' \-e DATABASE_PASSWORD_SECONDARY='password' \-e DATABASE_DESCRIPTION_SECONDARY='Production database' \-p 8000:8000 dlevsha/compalex

Где:

DATABASE_DRIVER - используемый драйвер для подключения

  • mysql - для MySQL

  • pgsql - для PostgreSQL

  • dblib - для Microsoft SQL Server

  • oci - для Oracle

DATABASE_HOST and DATABASE_HOST_SECONDARY - имя хоста или IP для подключения к первому и второму серверу.

Если базы развернуты локально на localhost:

Для пользователей MacOS и Windows: используйте host.docker.internal вместо localhost , поскольку скрипт, запущенный внутри контейнера должен подключиться на хостовую машину.

Для пользователей Linux: используйте опцию --network host (в этом случае контейнер "делит" сеть с хостовой машиной) и в качестве имя хоста для подключения к DB используйте localhost, либо с помощью команды ip a в секции docker0 посмотрите ip адрес хостовой машины.

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500    link/ether 02:42:e8:a9:95:58 brd ff:ff:ff:ff:ff:ff    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0       valid_lft forever preferred_lft forever
Вариант с пробросом коннектов к DB через SSH

Если вы имеете только SSH доступ на машины DB и вам не хочется открывать порты наружу - вы можете воспользоваться пробросом портов через SSH на localhost на разные порты, чтобы потом использовать эти подключения локально.

Пример:

ssh -L 1522:localhost:1521 [user name]@[remote host 1]ssh -L 1523:localhost:1521 [user name]@[remote host 2]

Пробросит 1521 порт с удаленных хостов remote host 1 и remote host 2 на localhost порты 1522 и 1523 соответственно.

Если у вас есть удаленный коннект не непосредственно на машину с DB, а на некоторый application сервер, который уже имеет подключение к DB, то подключения будут выглядеть так:

ssh -L 1522:[remote database server 1]:1521 [user name]@[remote application host 1]ssh -L 1523:[remote database server 2]:1521 [user name]@[remote application host 2]

Во всех описанных выше случаях соединение будет проброшено на локальную машину и в переменных DATABASE_HOST and DATABASE_HOST_SECONDARY нужно будет использовать ip, по схеме, описанной выше.

Если базы развернуты удаленно - для подключения просто используйте IP адрес машины с DB (убедитесь что на удаленной машине открыт порт и он доступен с машины, где запущен контейнер).

DATABASE_PORT and DATABASE_PORT_SECONDARY - порт для подключения к хосту баз данных.

Порты по умолчанию:

  • 3306 - Mysql

  • 5432 - PostgreSQL

  • 1433 - MSSQL

  • 1521 - Oracle

DATABASE_NAME and DATABASE_NAME_SECONDARY - название сравниваемых баз данных

DATABASE_USER / DATABASE_PASSWORD and DATABASE_USER_SECONDARY / DATABASE_PASSWORD_SECONDARY - логин и пароль для доступа к базам данных

DATABASE_DESCRIPTION and DATABASE_DESCRIPTION_SECONDARY - описание баз данных (опционально, в справочных целях).

После того как вы запустите контейнер, откройте браузер и перейдите http://localhost:8000. Должна отобразиться схема-сравнение, состоящая из двух колонок, в соответствии с указанными параметрами баз данных.

Иногда нет возможности организовать прямое локальное подключение к базам данных и изменения необходимо посмотреть прямо на сервере из консоли.

Для этих целей я рекомендую использовать консольный браузер eLinks, который поддерживает HTML-форматирование и цвета в разметке.

Необходимо установить скрипт на сервере, запустить контейнер (как это описано выше) и выполнить:

$ elinks http://localhost:8000

В своем терминале вы увидите примерно следующее:

Более подробная информация на сайте (на английском) http://compalex.net/.

Здесь можно попробовать как все это работает http://demo.compalex.net/.

Проект на GitHub https://github.com/dlevsha/compalex

Посмотреть на DockerHub https://hub.docker.com/r/dlevsha/compalex

Источник: habr.com
К списку статей
Опубликовано: 14.09.2020 10:18:41
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Mysql

Oracle

Postgresql

Sql

Microsoft sql server

Администрирование

Mssql

Postgre

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru