Сравните две базы данных MySQL [закрыто]
Вопрос
В настоящее время я разрабатываю приложение, использующее базу данных MySQL.
Структура базы данных все еще находится в движении и меняется по мере разработки (я меняю свою локальную копию, оставляя только ту, что находится на тестовом сервере).
Есть ли способ сравнить два экземпляра базы данных, чтобы увидеть, есть ли какие-либо изменения?
Хотя в настоящее время просто отказаться от предыдущей базы данных тестового сервера можно, но когда тестирование начинает вводить тестовые данные, это может стать немного сложнее.
То же самое, хотя и в большей степени, повторится позже в производстве...
Существует ли простой способ постепенного внесения изменений в рабочую базу данных, предпочтительно путем автоматического создания сценария для ее изменения?
Инструменты, упомянутые в ответах:
- Схема MySQL и сравнение данных Red-Gate (Коммерческий)
- Мааткит (ныне Перкона)
- жидкая основа
- Жаба
- Сравнение баз данных Nob Hill (Коммерческий)
- MySQL разница
- SQL EDT (Коммерческий)
Решение
Если вы работаете с небольшими базами данных, я обнаружил, что 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 для синхронизации двух баз данных.
Из списка сравнения функций... 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.
Если вам нужно сравнивать только схемы (а не данные) и у вас есть доступ к Perl, mysqldiff может подойти.Я использовал его, потому что он позволяет сравнивать локальные базы данных с удаленными базами данных (через SSH), поэтому вам не нужно беспокоиться о сбросе каких-либо данных.
http://adamspiers.org/computing/mysqldiff/
Он попытается сгенерировать SQL-запросы для синхронизации двух баз данных, но я не доверяю ему (да и вообще любому инструменту).Насколько мне известно, не существует 100% надежного способа реконструировать изменения, необходимые для преобразования одной схемы базы данных в другую, особенно если было внесено несколько изменений.
Например, если вы измените только тип столбца, автоматизированный инструмент легко догадается, как это воссоздать.Но если вы также переместите столбец, переименуете его, а также добавите или удалите другие столбцы, лучшее, что может сделать любой программный пакет, — это догадаться, что, вероятно, произошло.И вы можете потерять данные.
Я бы предложил отслеживать любые изменения схемы, которые вы вносите на сервер разработки, а затем вручную запускать эти операторы на работающем сервере (или включать их в сценарий обновления или миграции).Это более утомительно, но сохранит ваши данные в безопасности.И к тому времени, когда вы начнете предоставлять конечным пользователям доступ к вашему сайту, действительно ли вы будете постоянно вносить серьезные изменения в базу данных?
Посмотри на http://www.liquibase.org/
проверять: http://schemasync.org/ инструмент Schemasync работает для меня, это инструмент командной строки, который легко работает в командной строке Linux
Существует еще один инструмент mysql-diff с открытым исходным кодом:
Существует полезный инструмент, написанный на Perl, под названием Мааткит.Помимо прочего, он имеет несколько инструментов сравнения и синхронизации баз данных.
Сравнение SQL от RedGatehttp://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy для автоматизированного управления изменениями базы данных.http://dbdeploy.com/
Лично я бы начал с дампа обеих баз данных и сравнения дампов, но если вам нужны автоматически генерируемые сценарии слияния, вам понадобится настоящий инструмент.
Просто поиск Гугл появились следующие инструменты:
- MySQL рабочая среда, доступен в версиях Community (OSS) и Commercial.
- Сравнение базы данных Nob Hill, доступный бесплатно для MySQL.
- Листинг других инструментов сравнения SQL.
Взгляни на Сравнение данных dbForge для MySQL.Это условно-бесплатная программа с 30-дневным бесплатным пробным периодом.Это быстрый инструмент 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.
Что касается первой части вопроса, я просто делаю дамп обоих и сравниваю их.Не уверен насчет mysql, но в postgres pg_dump есть команда просто выгрузить схему без содержимого таблицы, чтобы вы могли увидеть, изменили ли вы схему.
Я работаю с маркетинговой командой Nob Hill. Я хотел вам сказать, что буду рад услышать ваши вопросы, предложения или что-нибудь еще, пожалуйста, не стесняйтесь обращаться ко мне.
Изначально мы решили создать наш инструмент с нуля, потому что, хотя на рынке есть и другие подобные продукты, ни один из них не выполняет свою работу должным образом.Довольно легко показать вам различия между базами данных.Совсем другое — сделать одну базу данных похожей на другую.Плавная миграция как схемы, так и данных всегда была проблемой.Что ж, здесь мы этого добились.
Мы настолько уверены, что он сможет обеспечить вам плавную миграцию, что если этого не произойдет – если сценарии миграции, которые он сгенерирует, недостаточно читабельны или не будут работать для вас, и мы не сможем исправить это в течение пяти рабочих дней – вы получите свою собственную бесплатную копию!