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

Я хотел бы создать файлы SQL, похожие на diff, для сравнения ДАННЫХ и СТРУКТУРЫ двух баз данных MySQL.

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

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

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


person Cedric    schedule 13.07.2011    source источник
comment
Спасибо Galz и ADW за вашу помощь. Даже если я не использую предложенное вами решение, я все равно считал его полезным. Копаюсь в банкомате Liquibase. См .: stackoverflow.com/questions/225772/compare-two-mysql- базы данных, что является связанной проблемой (но шире. Моя проблема была особенно связана с MySQL, командной строкой и бесплатным инструментом). Посмотрите также пример forum.liquibase.org/#Topic/49382000000251069 и посмотрите если это осуществимое решение.   -  person Cedric    schedule 15.07.2011


Ответы (3)


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

Чтобы сравнить две таблицы:

 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
person ADW    schedule 13.07.2011
comment
diff является частью mysql? - person Smith; 15.01.2021

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

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

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

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

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

person Royce Williams    schedule 11.12.2011
comment
Спасибо, что поделились Ройсом! Не знал страницу архива запросов Artful Software! - person antoniom; 13.04.2016

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

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

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

Удачи.

person Galz    schedule 13.07.2011