Сравните две базы данных MySQL, в командной строке, со свободным инструментом

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

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

Ответ 1

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

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

 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

Ответ 2

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

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

Здесь фрагмент оболочки оболочки script, который я написал для отображения схемы, отличается:

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

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

Ответ 3

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

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

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

Удачи.