현재 MySQL 데이터베이스를 사용하여 응용 프로그램을 개발 중입니다.
데이터베이스 구조는 여전히 유동적이며 개발이 진행되는 동안 변경됩니다 (로컬 사본을 변경하여 테스트 서버에만 남겨 둡니다).
데이터베이스의 두 인스턴스를 비교하여 변경 사항이 있는지 확인하는 방법이 있습니까?
현재 이전 테스트 서버 데이터베이스를 버리는 것은 좋지만 테스트가 테스트 데이터에 들어가기 시작하면 약간 까다로울 수 있습니다.
나중에 더 생산에서 나중에 다시 일어날 것입니다 …
데이터베이스를 수정하기 위해 자동으로 스크립트를 작성하여 프로덕션 데이터베이스를 점진적으로 변경하는 쉬운 방법이 있습니까?
답변에 언급 된 도구 :
- Red-Gate의 MySQL 스키마 및 데이터 비교 (상업용)
- Maatkit (현재는 Percona)
- 리퀴베이스
- 두꺼비
- 놉 힐 데이터베이스 비교 (상업용)
- MySQL 차이
- SQL EDT (상업용)
답변
작은 데이터베이스로 작업하는 경우 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과 호환됩니다.
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)