Сравнете две MySQL бази данни от командния ред с безплатен инструмент

Бих искал да генерирам diff-подобни SQL файлове, за да сравня ДАННИТЕ и СТРУКТУРАТА на две MySQL бази данни.

Тези получени файлове ще бъдат изпълнени като SQL заявки от командния ред.

Има различни стари теми, свързани със SO и различни форуми, но те се занимават с несвободен инструмент с потребителски интерфейс (не инструменти от командния ред).

Освен това базата данни не трябва да се синхронизира директно, а само чрез изпълнение на получения diff SQL скрипт.


person Cedric    schedule 13.07.2011    source източник
comment
Благодаря на Galz и ADW за вашата помощ. Дори и да не използвам решението, което предложихте, все пак го обмислих, така че беше полезно. Копая в liquibase atm. Вижте: 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. Той използва контролни суми на индекси и други стратегии за бързо разграничаване на таблици. Основната му цел е синхронизиране на реплики, но с малко допълнителна работа, това е страхотен инструмент за разлика. Вижте пълния ми отговор за това тук.

РЕДАКТИРАНЕ: Забравих да спомена, че сравнението на структурата е различен звяр. Правя това със съхранена процедура, която можете да извикате от командния ред, но може да не е това, което търсите.

Ето фрагмент от обвивка на shell-script, която написах за показване на разликите в схемата:

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 пакети за това, които лесно могат да бъдат стартирани от командния ред. Намерих и един за data diff (което е доста сложен проблем!), но е малко стар и не съм сигурен колко е добър.

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

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

Късмет.

person Galz    schedule 13.07.2011