Ответ 1
Рассматривали ли вы использование репликации MySQL?
Я искал портативную программу script или командной строки, которая может синхронизировать две схемы баз данных MySQL. Я не ищу решение на основе графического интерфейса, потому что оно не может быть автоматизировано или запущено с помощью средства buid/deployment.
В основном то, что он должен делать, это проверка базы данных1 и базы данных2. Проверьте разницу в схеме (таблицы и индексы) и предложите кучу SQL-операторов для запуска на одном, чтобы она максимально похожа на аналогичную структуру другого, минимизируя повреждение данных.
Если кто-то может указать пакет PHP, Python или Ruby, где реализован этот тип решения, я могу попытаться скопировать код оттуда.
Многие инструменты GUI MySQL, вероятно, могут это сделать, но я ищу решение для сценариев.
Изменить: Извините за неясность: я ищу синхронизацию в структуре таблицы, сохраняя при этом данные, насколько это возможно. Не репликация данных.
Дополнительная информация:
Почему репликация не работает.
Если это GUI: Нет, он не может быть использован. Мы не хотим связывать приложение с 20 МБ с нашим установщиком только для DB diff. Специально, когда исходный установщик меньше 1 МБ.
Рассматривали ли вы использование репликации MySQL?
SQLyog делает это, и это потрясающе. Мы часто используем его в производстве.
Для долгосрочного профессионального решения вы должны следить за помощью Schemamatic (http://versabanq.com/products/schemamatic.php). Эта ссылка показывает графическое приложение, но все, что он делает, это манипулировать программным обеспечением командной строки. На этой странице есть ссылка на его сайт кода Google, где можно найти версию С#.Net Schemamatic. Вашим идеальным решением было бы добавить поддержку MySQL в Schemamatic. Для SQL Server он идеально подходит и делает то, что вы упомянули.
Теперь, для краткосрочного решения я бы предложил сбросить данные, которые вы хотите, с помощью инструментов командной строки MySQL, таких как: mysqldump -A -c -uroot -ppassword > bkpmysql.sql
И играйте с ним, хотя для достижения желаемого вам потребуется некоторое время. Мне кажется, что схема сама по себе кажется вашим лучшим выбором. Дайте мне знать, если вам нужно какое-либо разъяснение, когда/если вы пытаетесь использовать Schemamatic.
Вы можете посмотреть некоторые инструменты, такие как dbdeploy (это версия java или .net) и liquidbase и другие.
Хотя большинство из них, я думаю, будет применять наборы изменений в БД контролируемым образом. Не знаю, могут ли они перепроектировать из существующих схем и сравнить.
Е.
Я знаю, что это старый вопрос, но это был первый результат в Google для того, что я искал (точно так же, как и начальный вопрос)
Я нашел ответ еще здесь, но я не помню URL это a script, который начинался с:
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
и больше похоже на это
#!/bin/sh
echo "Usage: dbdiff [user1:[email protected]] [user2:[email protected]] [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
проверьте, что это код базы данных configniter diff script generator