Сравните две базы данных 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/
Удачи.