programing

두 MySQL 데이터베이스 비교

sourcejob 2022. 10. 25. 17:50
반응형

두 MySQL 데이터베이스 비교

현재 MySQL 데이터베이스를 사용하여 애플리케이션을 개발하고 있습니다.

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

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

현재 이전 테스트 서버 데이터베이스를 폐기하는 것만으로는 충분하지만 테스트 데이터를 입력하기 시작하면 조금 까다로워질 수 있습니다.
같은 일이 나중에 생산될 때 다시 일어날 것이다.

프로덕션 데이터베이스를 점진적으로 변경하는 쉬운 방법이 있습니까? 가능하면 스크립트를 자동으로 작성하여 수정하는 것이 좋습니다.


답변에 언급된 도구:

두 는 mysqldump를 사용합니다.--skip-comments ★★★★★★★★★★★★★★★★★」--skip-extended-insertSQL 스크립트를 생성하는 옵션을 사용하면 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

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

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

  • Live 데이터베이스를 내 테스트 데이터베이스와 동기화합니다.
  • 두 데이터베이스 간의 차이를 보여줍니다.

비용이 많이 들고, 윈도우와 맥에만 적용되며, UI도 별난데, 마음에 들어요.

SQLyog(상용)에는 두 데이터베이스를 동기화하기 위한 SQL을 생성하는 Schema Synchronization Tool이 있습니다.

여기에 이미지 설명 입력

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

물론 여러 가지 방법이 있지만 저는 dump 명령어와 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에서 찾고 있는 기능일 수 있습니다.

Server,, Microsoft SQL Server, Sybase, DB2, Solid, Postgre를 사용할 수 . 및 , H2 © MySQLalt 텍스트

데이터가 아닌 스키마만 비교하고 Perl에 액세스할 수 있는 경우 mysqldiff가 작동할 수 있습니다.로컬 데이터베이스를 (SSH를 통해) 리모트 데이터베이스와 비교할 수 있기 때문에 데이터를 덤프할 필요가 없기 때문에 사용하고 있습니다.

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

SQL 쿼리를 생성하여 두 데이터베이스를 동기화하려고 하지만 신뢰하지 않습니다(또는 실제로 어떤 도구도).제가 알기로는 데이터베이스 스키마를 다른 스키마로 변환하는 데 필요한 변경 사항을 100% 리버스 엔지니어링할 수 있는 방법은 없습니다. 특히 여러 변경이 이루어진 경우에는 더욱 그렇습니다.

예를 들어 열의 유형만 변경하는 경우 자동 도구를 통해 이를 재생성하는 방법을 쉽게 추측할 수 있습니다.그러나 열을 이동하거나 이름을 변경하고 다른 열을 추가하거나 제거할 경우 소프트웨어 패키지가 할 수 있는 최선의 방법은 무슨 일이 일어났는지 추측하는 것입니다.데이터가 손실될 수 있습니다.

개발 서버에 대한 스키마 변경 사항을 추적한 후 라이브 서버에서 수동으로 해당 문을 실행할 것을 권장합니다(또는 업그레이드 스크립트 또는 마이그레이션으로 롤링).더 지루하지만 데이터를 안전하게 보관할 수 있습니다.최종 사용자가 사이트에 액세스할 수 있도록 허용할 때까지 데이터베이스를 지속적으로 대폭 변경할 예정입니까?

http://www.liquibase.org/ 를 참조해 주세요.

체크: http://schemasync.org/ 스키마싱크 툴은 나에게 도움이 됩니다.이것은 Linux 명령줄에서 쉽게 동작하는 명령줄 툴입니다.

다른 오픈 소스 명령줄 mysql-diff 툴이 있습니다.

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

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

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

DBDeploy를 통해 데이터베이스 변경 관리를 자동화할 수 있습니다.http://dbdeploy.com/

저로서는 먼저 데이터베이스를 덤프하고 덤프를 분산하는 것으로 시작하지만, 자동으로 생성된 Marge Script를 사용하려면 실제 도구를 사용해야 합니다.

간단한 Google 검색으로 다음과 같은 도구가 검색되었습니다.

dbForge Data Compare for MySQL을 참조하십시오.30일간의 무료 체험 기간이 있는 쉐어웨어입니다.데이터 비교 및 동기화, 데이터 차이 관리 및 맞춤 동기화를 위한 빠른 MySQL GUI 도구입니다.

MySQL용 dbForge 데이터 비교

간단한 도구를 찾기 위해 웹에서 몇 시간 동안 검색한 후 Ubuntu Software Center를 찾지 않았다는 것을 알게 되었습니다.여기 제가 찾은 무료 솔루션이 있습니다.http://torasql.com/ Windows용 버전도 있다고 합니다만, 저는 Ubuntu에서만 사용하고 있습니다.

편집: 2015년 2월 5일 Windows 툴이 필요한 경우 TOAD는 완벽하며 무료입니다.http://software.dell.com/products/toad-for-mysql/

Apache zeta 컴포넌트 라이브러리는 PHP 5 기반의 애플리케이션 개발을 위한 느슨하게 결합된 컴포넌트의 범용 라이브러리입니다.

eZ 컴포넌트 - DatabaseSchema를 통해 다음 작업을 수행할 수 있습니다.

.데이터베이스 스키마 정의 작성/저장데이터베이스 스키마를 비교한다..동기 쿼리 생성

튜토리얼은 http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html 에서 확인하실 수 있습니다.

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

장점:

  • 빠른
  • 사용하기 쉽다
  • 적용하기 쉬운 변경 사항 선택

단점:

  • 길이가 작은 ints에 동기화되지 않음
  • 인덱스 이름이 올바르게 동기화되지 않음
  • 코멘트가 동기화되지 않음

이 경우 MySQL용 Navicat이 도움이 될 것 같습니다.MySQL용 데이터 및 구조 동기화를 지원합니다. 여기에 이미지 설명 입력

질문의 첫 부분은 두 가지를 덤프해서 구분하는 거예요.mysql에 대해서는 확실하지 않지만 postgres pg_dump에는 테이블 내용 없이 스키마를 덤프하는 명령어가 있기 때문에 스키마가 변경되었는지 확인할 수 있습니다.

저는 Nob Hill의 마케팅 팀과 일하고 있습니다.질문이나 제안이나 그 밖의 어떤 것이라도 기꺼이 듣고 싶다고 말하고 싶으니 언제든지 연락해 주십시오.

우리는 원래 처음부터 도구를 만들기로 했습니다. 왜냐하면 시장에 이러한 제품들이 있지만 제대로 작동하는 제품이 없기 때문입니다.데이터베이스 간의 차이를 보여주는 것은 매우 쉽습니다.실제로 하나의 데이터베이스를 다른 데이터베이스와 같이 만드는 것은 전혀 다릅니다.스키마와 데이터의 원활한 이행은 항상 어려운 과제였습니다. 이제다 요.
델은 원활한 이행이 가능하다고 자신하고 있습니다.만일 생성된 이행 스크립트가 충분히 판독할 수 없거나 동작하지 않는 경우, 5영업일 이내에 수정할 수 없는 경우, 고객 전용의 무료 카피를 입수할 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/225772/compare-two-mysql-databases

반응형