[mysql] 두 개의 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과 호환됩니다.
대체 텍스트