Сравните две базы данных MySQL в командной строке с помощью бесплатного инструмента - PullRequest
11 голосов
/ 13 июля 2011

Я хотел бы сгенерировать diff-подобные файлы SQL, чтобы сравнить DATA и СТРУКТУРУ двух баз данных MySQL.

Эти результирующие файлы будут выполняться как запросы SQL в командной строке.

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

Кроме того, база данных не должна синхронизироваться напрямую, а только путем выполнения результирующего сценария diff SQL.

Ответы [ 3 ]

13 голосов
/ 13 июля 2011

Далее будет показано, как показать различия (первая часть вашего вопроса), но на самом деле выходные данные не будут использоваться в качестве файлов исправлений.

Для сравнения двух таблиц:

 mysql -u whatever -e "describe table" database1 > file1.txt
 mysql -u whatever -e "describe table" database2 > file2.txt
 diff file1.txt file2.txt

Для сравнения данных:

 mysql -u whatever -e "select * from table" database1 > file1.txt
 mysql -u whatever -e "select * from table" database2 > file2.txt
 diff file1.txt file2.txt

Для сравнения баз данных:

 mysqldump --extended-insert=FALSE -u whatever database1 > file1.txt
 mysqldump --extended-insert=FALSE -u whatever database2 > file2.txt
 diff file1.txt file2.txt
4 голосов
/ 11 декабря 2011

Ознакомьтесь с набором инструментов Percona с открытым исходным кодом, в частности, утилитой pt-table-sync .Он использует контрольные суммы индексов и другие стратегии для сравнения таблиц fast .Его основная цель - синхронизация реплик, но с небольшой дополнительной работой это отличный инструмент сравнения.См. мой полный ответ об этом здесь .

РЕДАКТИРОВАТЬ : Я забыл упомянуть, что сравнение структуры другого зверя.Я делаю это с помощью хранимой процедуры, которую вы можете вызвать из командной строки, но это может быть не то, что вы ищете.

Вот фрагмент из оболочки-скрипта, который я написал для показа различий схемы:

mysql ${MYSQL_CNF_OPTION} -u ${DB_USER} \
-e "USE sys; CALL compareDBs('${DBDIFF_LOCAL_DB1}','${DBDIFF_LOCAL_DB2}');"

Вызывает хранимую процедуру compareDBs, которую я получил от страницы архива запросов Artful Software .

1 голос
/ 13 июля 2011

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

Сравнение схем: http://adamspiers.org/computing/mysqldiff/

Сравнение данных: http://rossbeyer.net/software/mysql_coldiff/

Удачи.

...