sourcetip

MySQL 덤프 2개의 차이점은 어떻게 볼 수 있습니까?

fileupload 2023. 10. 20. 14:07
반응형

MySQL 덤프 2개의 차이점은 어떻게 볼 수 있습니까?

MySQL 덤프 파일이 2개 있습니다.두 테이블의 테이블 데이터 차이를 찾고 싶습니다.

"-- skip-opt"로 mysqldump를 실행하여 2개의 덤프 파일을 가져옵니다.

mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb1 > /tmp/dump1.sql

mysqldump --skip-opt -u $MY_USER -p$MY_PASS mydb2 > /tmp/dump2.sql

다음 diff 옵션을 사용하여 비교합니다.

diff -y --suppress-common-lines /tmp/dump1 /tmp/dump2

DIFF 도구를 사용합니다. 그래픽 도구는 다음과 같습니다(둘 다 무료입니다).

저는 단지 줄 바꿈을 추가할 수 밖에 없었습니다.),(각각의 레코드가 개별 라인이 되도록 합니다.그런 다음 결과를 다음과 같은 도구에 입력할 수 있습니다.diff. 이 명령은 다음과 같은 역할을 합니다.

FORMAT_="s/),(/),\n(/g"
diff <(sed $FORMAT_ old-dump.sql) <(sed $FORMAT_ new-dump.sql)

웹 사이트가 더 이상 작동하지 않으므로 이 도구는 더 이상 사용할 수 없습니다.

제 sqldiff라는 도구를 한 번 더 주시면 될 것 같아요, 제가 직접 해본 적은 없지만 제 목록에 한동안 올라와 있었어요.

이것은 나에게 매우 유용했고, 그래서 나의 2센트를 더했습니다.

git diff --word-diff=color dump1.sql dump2.sql | less -R

제가 쓰는 건 이렇습니다.그건 효과가 있다.

#!/bin/bash
# Do a mysqldump of the a db, once a day or so and diff to the previous day. I want to catch when data has changed
# Use the --extended-insert=false so that each row of data is on a single line, that way the diff catches individual record changes

mv /tmp/dbdump0.sql /tmp/dbdump1.sql 2>/dev/null

mysqldump -h dbhostname.com -P 3306 -u username -p password --complete-insert --extended-insert=false dbname > /tmp/dbdump0.sql

# Ignore everything except data lines
grep "^INSERT" /tmp/dbdump0.sql  > /tmp/dbdump0inserts
grep "^INSERT" /tmp/dbdump1.sql  > /tmp/dbdump1inserts

diff /tmp/dbdump1.sql  /tmp/dbdump0.sql   > /tmp/dbdumpdiffs
r=$?
if [[ 0 != "$r" ]] ; then
    # notifier code remove
fi

2개의 mysql diff를 비교하기 위해서는 순서가 정의된 방식이고 관련이 없는 데이터가 생략되도록 특정 방식으로 수행해야 합니다.

이것은 어느 순간에 완전히 가능하지 않았습니다.mysqldump, 그동안 이것이 바뀌었는지는 잘 모르겠습니다.

그 일을 위한 좋은 도구는pydumpy https://code.google.com/p/pydumpy/ (미러: https://github.com/miebach/pydumpy)

질문에서와 같이 오래된 덤프와 비교하려면 먼저 덤프에서 임시 데이터베이스를 만든 다음 여기에서 시작할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3840908/how-do-i-see-the-differences-between-2-mysql-dumps

반응형