문제

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

데이터베이스 구조에 아직도 유출하고 변화하는 동안 개발이 진행됨에 따라(I 변경 내역을 복사를 떠나,하나의 테스트-서버 혼자).

이 있을 비교하는 방법은 두 가지 경우의 데이터베이스를 보면 어떠한 변경 사항이 있?

는 현재 단순히 폐기 이전에 테스트 서버는 데이터베이스는 괜찮 테스트 시작을 입력하 테스트 데이터를 얻을 수 있는 까다로운 방법입니다.
동일한지만 그래서 더 많은 것이 다시 일어날 이후에 생산...

는 쉬운 방법이 있을 점진적으로 변경 생산 데이터베이스,바람직하여 자동으로 생성하는 스크립트를 수정할 수?


도구에서 언급한 답변:

도움이 되었습니까?

해결책

작은 데이터베이스로 작업하는 경우 --skip-comments 그리고 --skip-extended-insert SQL 스크립트를 생성 한 다음 SQL 스크립트에서 Diff를 실행하는 옵션이 잘 작동합니다.

댓글을 건너 뛰면 mysqldump 명령을 실행 한 시간과 같은 의미없는 차이를 피합니다. 사용함으로써 --skip-extended-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

다른 팁

MySQL을위한 두꺼비 데이터와 스키마가 기능을 비교하여 동기화 스크립트를 생성 할 것이라고 생각합니다. 무엇보다도, 그것은 프리웨어입니다.

나는라는 소프트웨어를 사용합니다 NAVICAT 에게 :

  • 라이브 데이터베이스를 테스트 데이터베이스에 동기화합니다.
  • 두 데이터베이스 간의 차이점을 보여줍니다.

비용이 많이 들고 창문과 Mac 전용이며, 멍청한 UI가 있지만 좋아합니다.

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

enter image description here

기능 비교 목록에서 ... MySQL 워크 벤치 커뮤니티 에디션에서 스키마 차이 및 스키마 동기화를 제공합니다.

확실히 여러 가지 방법이 있지만, 제 경우에는 덤프 및 diff 명령을 선호합니다. 여기 Jared의 의견을 기반으로 한 스크립트가 있습니다.

#!/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과 함께 작동합니다.alt text

Schemas (데이터가 아닌)를 비교하고 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/

있는 유용한 도구를 사용하여 작성된 perl 라 Maatkit.그것은 여러 데이터베이스를 비교 및 동기화 도구니다.

Redgate의 SQL 비교http://www.red-gate.com/products/sql_compare/index.htm

자동화 된 방식으로 데이터베이스 변경 관리를 돕기 위해 DBDEPLOYhttp://dbdeploy.com/

직접 데이터베이스를 모두 덤프하고 덤프를 차단하는 것으로 시작하지만 자동으로 Merge 스크립트를 자동으로 생성하려면 실제 도구를 얻고 싶습니다.

간단한 구글 검색 다음 도구를 찾았습니다.

살펴보 dbForge 데이터에 대해 비교 MySQL.그것은 shareware30 일 무료 체험 기간입니다.그것은 빠른 MySQL GUI 도구에 대한 데이터의 비교 및 동기화,관리 데이터의 차이점과 사용자 정의합니다.

dbForge Data Compare for MySQL

간단한 도구를 찾기 위해 웹에서 몇 시간을 검색 한 후, 나는 Ubuntu 소프트웨어 센터에서 보지 않았다는 것을 깨달았습니다. 다음은 내가 찾은 무료 솔루션입니다.http://torasql.com/그들은 또한 Windows에 대한 버전을 가지고 있다고 주장하지만 Ubuntu에서만 사용하고 있습니다.

편집 : 2015-FEB-05 Windows 도구가 필요한 경우 두꺼비가 완벽하고 무료입니다.http://software.dell.com/products/toad-for-mysql/

Apache Zeta 구성 요소 라이브러리는 PHP 5를 기반으로 한 응용 프로그램 개발을위한 Loosly 결합 구성 요소의 범용 라이브러리입니다.

EZ 구성 요소 - DatabasesSchema 당신은 다음을 허용합니다 :

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

여기에서 튜토리얼을 확인할 수 있습니다.http://incubator.apache.org/zetacomponents/documentation/trunk/databaseschema/tutorial.html

사용하기 매우 쉽게 비교 및 동기화구:
데이터베이스를 비교 http://www.clevercomponents.com/products/dbcomparer/index.asp

장점:

  • fast
  • 사용하기 쉽
  • 을 선택하기 쉬운 변경 사항을 적용

단점:

  • 동기화되지 않습 길이의 작은 수
  • 동기화하지 않는 인덱스 제대로 이름
  • 동기화되지 않습니다 댓글

제 생각에는 MySQL의 Navicat 이 경우에 도움이됩니다. MySQL의 데이터 및 구조 동기화를 지원합니다. enter image description here

질문의 첫 번째 부분을 위해, 나는 단지 둘 다 덤프를하고 그것들을 diff합니다. MySQL에 대해서는 확실하지 않지만 Postgres PG_DUMP에는 테이블 내용없이 스키마를 덤프하라는 명령이 있으므로 스키마를 변경했는지 확인할 수 있습니다.

저는 Nob Hill의 마케팅 팀과 함께 일하고 있습니다. 귀하의 질문, 제안 또는 다른 것을 듣고 기꺼이 말하고 싶습니다. 언제든지 저에게 연락하십시오.

우리는 원래 시장에 다른 제품이 있지만 그중 어느 누구도 그 일을 제대로하지 않기 때문에 처음부터 우리의 도구를 처음부터 만들기로 결정했습니다. 데이터베이스의 차이점을 보여주는 것은 매우 쉽습니다. 실제로 한 데이터베이스를 다른 데이터베이스처럼 만드는 것은 또 다른 것입니다. 스키마와 데이터의 원활한 마이그레이션은 항상 어려운 일이었습니다. 글쎄, 우리는 여기서 그것을 달성했습니다.
우리는 그것이 당신에게 원활한 마이그레이션을 제공 할 수 있다고 확신합니다. 그렇지 않은 경우 - 생성하는 마이그레이션 스크립트가 충분히 읽을 수 없거나 당신을 위해 작동하지 않으며, 5 일 내에 그것을 고칠 수는 없습니다. 당신은 당신의 나만의 무료 사본을 얻을 것입니다!

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top