development

두 개의 MySQL 데이터베이스 비교

big-blog 2020. 2. 27. 22:22
반응형

두 개의 MySQL 데이터베이스 비교


현재 MySQL 데이터베이스를 사용하여 응용 프로그램을 개발 중입니다.

데이터베이스 구조는 여전히 유동적이며 개발이 진행되는 동안 변경됩니다 (로컬 사본을 변경하여 테스트 서버에만 남겨 둡니다).

데이터베이스의 두 인스턴스를 비교하여 변경 사항이 있는지 확인하는 방법이 있습니까?

현재 이전 테스트 서버 데이터베이스를 버리는 것은 좋지만 테스트가 테스트 데이터에 들어가기 시작하면 약간 까다로울 수 있습니다.
나중에 더 생산에서 다시 일어날 것입니다 ...

데이터베이스를 수정하기 위해 자동으로 스크립트를 작성하여 프로덕션 데이터베이스를 점진적으로 변경하는 쉬운 방법이 있습니까?


답변에 언급 된 도구 :


작은 데이터베이스로 작업하는 경우 SQL 스크립트를 생성 하는 --skip-comments--skip-extended-insert옵션을 사용하여 두 데이터베이스 모두에서 mysqldump 를 실행하면 SQL 스크립트에서 diff를 실행하는 것이 좋습니다.

주석을 건너 뛰면 mysqldump 명령을 실행 한 시간과 같은 의미없는 차이를 피할 수 있습니다. --skip-extended-insert명령을 사용하면 각 행이 고유 한 insert 문으로 삽입됩니다. 이렇게하면 하나의 새로운 레코드 또는 수정 된 레코드가 향후 모든 삽입 문에서 연쇄 반응을 일으킬 수있는 상황을 제거합니다. 이 옵션으로 실행하면 주석이없는 더 큰 덤프가 생성되므로 프로덕션 용도로는 원하지 않지만 개발에는 적합합니다. 아래에 사용하는 명령의 예를 넣었습니다.

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql

Toad for MySQL 에는 데이터 및 스키마 비교 기능이 있으며 동기화 스크립트를 만들 수도 있다고 생각합니다. 무엇보다도, 프리웨어입니다.


Navicat 이라는 소프트웨어를 사용 하여 다음을 수행합니다.

  • 라이브 데이터베이스를 테스트 데이터베이스와 동기화하십시오.
  • 두 데이터베이스의 차이점을 보여줍니다.

돈이 들고 창과 맥만 있고 엉뚱한 UI가 있지만 마음에 듭니다.


SQLyog (상업용)에는 두 데이터베이스를 동기화하기위한 SQL을 생성 하는 스키마 동기화 도구가 있습니다.

여기에 이미지 설명을 입력하십시오


기능 비교 목록에서 ... MySQL Workbench 는 커뮤니티 에디션에서 Schema Diff 및 Schema Synchronization을 제공합니다.


확실히 많은 방법이 있지만 제 경우에는 dump and diff 명령을 선호합니다. 자레드의 의견을 바탕으로 한 스크립트는 다음과 같습니다.

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

피드백은 환영합니다 :)


dbSolo, 그것은 지불되지만이 기능은 당신이 찾고있는 것일 수 있습니다 http://www.dbsolo.com/help/compare.html

Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 및 MySQL과 호환됩니다. 대체 텍스트


데이터가 아닌 스키마 만 비교하고 Perl에 액세스해야하는 경우 mysqldiff가 작동 할 수 있습니다. 로컬 데이터베이스를 SSH를 통해 원격 데이터베이스와 비교할 수 있기 때문에 사용했기 때문에 데이터 덤프를 신경 쓰지 않아도됩니다.

http://adamspiers.org/computing/mysqldiff/

두 데이터베이스를 동기화하기 위해 SQL 쿼리를 생성하려고 시도하지만 신뢰할 수는 없습니다 (또는 실제로는 도구는 아닙니다). 내가 아는 한, 특히 여러 변경 사항이있을 때 한 데이터베이스 스키마를 다른 데이터베이스 스키마로 변환하는 데 필요한 변경 사항을 리버스 엔지니어링하는 100 % 신뢰할 수있는 방법은 없습니다.

예를 들어, 열 유형 만 변경하면 자동화 된 도구가이를 다시 작성하는 방법을 쉽게 추측 할 수 있습니다. 그러나 열을 이동하고 이름을 바꾸고 다른 열을 추가하거나 제거하는 경우 소프트웨어 패키지가 수행 할 수있는 최선의 방법은 아마도 무슨 일이 있었는지 추측하는 것입니다. 데이터가 손실 될 수 있습니다.

개발 서버에 대한 스키마 변경 사항을 추적 한 다음 라이브 서버에서 직접 해당 문을 실행하거나 업그레이드 스크립트 또는 마이그레이션으로 롤링하는 것이 좋습니다. 더 지루하지만 데이터를 안전하게 유지합니다. 그리고 최종 사용자가 귀하의 사이트에 액세스 할 수있게되면서 데이터베이스를 지속적으로 많이 변경하게됩니까?


http://www.liquibase.org/보십시오


확인 : http://schemasync.org/ schemasync 도구가 나를 위해 작동합니다 .Linux 명령 줄에서 쉽게 작동하는 명령 줄 도구입니다


또 다른 오픈 소스 명령 줄 mysql-diff 도구가 있습니다.

http://bitbucket.org/stepancheg/mysql-diff/


Maatkit 이라는 perl을 사용하여 작성된 유용한 도구가 있습니다. 여러 데이터베이스 비교 및 ​​동기화 도구가 있습니다.


RedGate에 의한 SQL 비교 http://www.red-gate.com/products/SQL_Compare/index.htm

자동화 된 방식으로 데이터베이스 변경 관리를 도와주는 DBDeploy http://dbdeploy.com/


필자는 데이터베이스 덤프와 덤프 디핑으로 시작하지만 자동으로 생성 된 병합 스크립트를 원한다면 실제 도구를 원할 것입니다.

간단한 Google 검색 으로 다음 도구가 나타났습니다.


dbForge Data Compare for MySQL을 살펴 보십시오 . 무료 평가판 기간이 30 일인 쉐어웨어입니다. 데이터 비교 및 ​​동기화, 데이터 차이 관리 및 사용자 정의 가능한 동기화를위한 빠른 MySQL GUI 도구입니다.

MySQL 용 dbForge 데이터 비교


After hours searching on web for simple tool, i realized i didn't look in Ubuntu Software Center. Here is a free solution i found: http://torasql.com/ They claim to have a version for Windows also, but I'm only using it under Ubuntu.

Edit: 2015-Feb-05 If you need Windows tool, TOAD is perfect and free: http://software.dell.com/products/toad-for-mysql/


The apache zeta components library is a general purpose library of loosly coupled components for development of applications based on PHP 5.

eZ Components - DatabaseSchema allows you to:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

You can check the tutorial here: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html


Very easy to use comparison and sync tool:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp

Advantages:

  • fast
  • easy to use
  • easy to select changes to apply

Disadvantages:

  • does not sync length to tiny ints
  • does not sync index names properly
  • does not sync comments

I think Navicat for MySQL will be helpful for this case. It supports Data and Structure Synchronization for MySQL. 여기에 이미지 설명을 입력하십시오


For the first part of the question, I just do a dump of both and diff them. Not sure about mysql, but postgres pg_dump has a command to just dump the schema without the table contents, so you can see if you've changed the schema any.


I'm working with Nob Hill's Marketing team, I wanted to tell you I'll be happy to hear your questions, suggestion or anything else, please feel free to contact me.

We originally decided to create our tool from scratch because while there are other such products on the market, none of them do the job right. It’s quite easy to show you the differences between databases. It’s quite another to actually make one database like the other. Smooth migration, both of schema and data, has always been a challenge. Well, we have achieved it here.
We are so confident that it could provide you a smooth migration, than if it doesn’t – if the migration scripts it generates are not readable enough or won’t work for you, and we can’t fix it in five business days – you will get your own free copy!

http://www.nobhillsoft.com/NHDBCompare.aspx

참고 URL : https://stackoverflow.com/questions/225772/compare-two-mysql-databases



반응형