Вопрос

В настоящее время я разрабатываю приложение, использующее базу данных MySQL.

Структура базы данных все еще находится в движении и меняется по мере разработки (я меняю свою локальную копию, оставляя только ту, что находится на тестовом сервере).

Есть ли способ сравнить два экземпляра базы данных, чтобы увидеть, есть ли какие-либо изменения?

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

Существует ли простой способ постепенного внесения изменений в рабочую базу данных, предпочтительно путем автоматического создания сценария для ее изменения?


Инструменты, упомянутые в ответах:

Это было полезно?

Решение

Если вы работаете с небольшими базами данных, я обнаружил, что mysqldump выполняется в обеих базах данных с помощью --skip-comments и --skip-extended-insert опции для генерации SQL-скриптов, тогда запуск diff в SQL-скриптах работает очень хорошо.

Пропуская комментарии, вы избегаете бессмысленных различий, таких как время запуска команды mysqldump.С помощью --skip-extended-insert команда, вы гарантируете, что каждая строка вставляется с помощью собственного оператора вставки.Это исключает ситуацию, когда одна новая или измененная запись может вызвать цепную реакцию во всех будущих операторах вставки.Запуск с этими параметрами создает более крупные дампы без комментариев, поэтому, вероятно, это не то, что вам нужно делать в рабочей среде, но для разработки это вполне подойдет.Ниже я привел примеры команд, которые использую:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

Другие советы

Жаба для MySQL имеет функции сравнения данных и схем, и я считаю, что он даже создаст сценарий синхронизации.Лучше всего то, что это бесплатно.

Я использую часть программного обеспечения под названием Навикат к :

  • Синхронизируйте базы данных Live с моими тестовыми базами данных.
  • Покажите различия между двумя базами данных.

Оно стоит денег, доступно только для Windows и Mac, и у него странный пользовательский интерфейс, но он мне нравится.

Существует инструмент синхронизации схемы в SQLyog (коммерческий), который генерирует SQL для синхронизации двух баз данных.

enter image description here

Из списка сравнения функций... MySQL рабочая среда предлагает Schema Diff и Schema Synchronization в своей версии сообщества.

Конечно, есть много способов, но в моем случае я предпочитаю команды dump и diff.Итак, вот сценарий, основанный на комментарии Джареда:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

Обратная связь приветствуется :)

dbSolo, он платный, но эта функция может быть той, которую вы ищете.http://www.dbsolo.com/help/compare.html

Он работает с Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 и MySQL.alt text

Если вам нужно сравнивать только схемы (а не данные) и у вас есть доступ к Perl, mysqldiff может подойти.Я использовал его, потому что он позволяет сравнивать локальные базы данных с удаленными базами данных (через SSH), поэтому вам не нужно беспокоиться о сбросе каких-либо данных.

http://adamspiers.org/computing/mysqldiff/

Он попытается сгенерировать SQL-запросы для синхронизации двух баз данных, но я не доверяю ему (да и вообще любому инструменту).Насколько мне известно, не существует 100% надежного способа реконструировать изменения, необходимые для преобразования одной схемы базы данных в другую, особенно если было внесено несколько изменений.

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

Я бы предложил отслеживать любые изменения схемы, которые вы вносите на сервер разработки, а затем вручную запускать эти операторы на работающем сервере (или включать их в сценарий обновления или миграции).Это более утомительно, но сохранит ваши данные в безопасности.И к тому времени, когда вы начнете предоставлять конечным пользователям доступ к вашему сайту, действительно ли вы будете постоянно вносить серьезные изменения в базу данных?

Посмотри на http://www.liquibase.org/

проверять: http://schemasync.org/ инструмент Schemasync работает для меня, это инструмент командной строки, который легко работает в командной строке Linux

Существует еще один инструмент mysql-diff с открытым исходным кодом:

http://bitbucket.org/stepancheg/mysql-diff/

Существует полезный инструмент, написанный на Perl, под названием Мааткит.Помимо прочего, он имеет несколько инструментов сравнения и синхронизации баз данных.

Сравнение SQL от RedGatehttp://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy для автоматизированного управления изменениями базы данных.http://dbdeploy.com/

Лично я бы начал с дампа обеих баз данных и сравнения дампов, но если вам нужны автоматически генерируемые сценарии слияния, вам понадобится настоящий инструмент.

Просто поиск Гугл появились следующие инструменты:

Взгляни на Сравнение данных dbForge для MySQL.Это условно-бесплатная программа с 30-дневным бесплатным пробным периодом.Это быстрый инструмент MySQL с графическим интерфейсом для сравнения и синхронизации данных, управления различиями в данных и настраиваемой синхронизации.

dbForge Data Compare for MySQL

После нескольких часов поиска в Интернете простого инструмента я понял, что не искал в Центре программного обеспечения Ubuntu.Вот бесплатное решение, которое я нашел:http://torasql.com/Они утверждают, что у них есть версия и для Windows, но я использую ее только под Ubuntu.

Редактировать:2015-FEB-05 Если вам нужен инструмент Windows, Toad идеальная и бесплатная:http://software.dell.com/products/toad-for-mysql/

Библиотека компонентов apache zeta — это библиотека общего назначения слабосвязанных компонентов для разработки приложений на базе PHP 5.

Компоненты eZ — схема базы данных позволяет вам:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

Вы можете проверить учебник здесь:http://incubator.apache.org/zetacomComponents/documentation/trunk/DatabaseSchema/tutorial.html

Очень простой в использовании инструмент сравнения и синхронизации:
Средство сравнения баз данных http://www.clevercomComponents.com/products/dbcomparer/index.asp

Преимущества:

  • быстрый
  • легко использовать
  • легко выбрать изменения для применения

Недостатки:

  • не синхронизирует длину с крошечными целыми числами
  • неправильно синхронизирует имена индексов
  • не синхронизирует комментарии

Я думаю Навикат для MySQL будет полезен в этом случае.Он поддерживает синхронизацию данных и структур для MySQL. enter image description here

Что касается первой части вопроса, я просто делаю дамп обоих и сравниваю их.Не уверен насчет mysql, но в postgres pg_dump есть команда просто выгрузить схему без содержимого таблицы, чтобы вы могли увидеть, изменили ли вы схему.

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

Изначально мы решили создать наш инструмент с нуля, потому что, хотя на рынке есть и другие подобные продукты, ни один из них не выполняет свою работу должным образом.Довольно легко показать вам различия между базами данных.Совсем другое — сделать одну базу данных похожей на другую.Плавная миграция как схемы, так и данных всегда была проблемой.Что ж, здесь мы этого добились.
Мы настолько уверены, что он сможет обеспечить вам плавную миграцию, что если этого не произойдет – если сценарии миграции, которые он сгенерирует, недостаточно читабельны или не будут работать для вас, и мы не сможем исправить это в течение пяти рабочих дней – вы получите свою собственную бесплатную копию!

http://www.nobhillsoft.com/NHDBCompare.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top