Как увидеть различия между двумя дампами MySQL?

18

У меня есть два файла дампа MySQL. Я хочу найти разницу данных таблицы между двумя таблицами.

    
задан Tree 01.10.2010 в 17:59
источник
  • Этот вопрос отчаянно нуждается в более подробной информации. –  JoshD 01.10.2010 в 18:02

5 ответов

7

Используйте инструмент DIFF - вот некоторые графические (оба являются бесплатными):

ответ дан OMG Ponies 01.10.2010 в 18:04
  • KDIFF падает, но winmerge отлично работает! –  Mike Lyons 04.12.2014 в 17:18
  • winmerge не слишком хорошо работал –  Kolob Canyon 19.10.2016 в 00:59
6

запустите mysqldump с помощью «--skip-opt», чтобы получить 2 файла дампа i.e:

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
    
ответ дан Fabio Pedrazzoli 25.07.2014 в 14:07
1

Может быть, вы можете дать инструмент под названием mysqldiff a go, я еще не пробовал его, но он был в моем списке на некоторое время.

ответ дан CharlesLeaf 01.10.2010 в 18:04
  • Насколько я понимаю, mysqldiff говорит о различиях в структуре таблицы, а не о различиях в самих данных. Это может быть или не быть тем, что ищет Дерево ... –  titanoboa 04.10.2010 в 11:24
  • blech, набор PHP-скриптов, для которого требуется webgui, бла-бла. –  Otheus 21.12.2015 в 17:37
1

Чтобы сравнить 2 разности mysql, они должны быть выполнены определенным образом, так что порядок определен определенным образом, а не соответствующие данные опущены.

Это было в какой-то момент не вполне возможно с mysqldump , я не уверен, что это изменилось за это время.

Одним хорошим инструментом для задания является pydumpy Ссылка (зеркало: Ссылка )

Если вы хотите сравнить со старым дампом, как и в вопросе, вы можете сначала создать временную базу данных из дампа, а затем начать там.

    
ответ дан mit 16.06.2015 в 17:44
0

Вот что я использую. Он работает.


#!/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 frn-platform-staging.cluster-ciz5gh1cbpdi.us-west-2.rds.amazonaws.com -P 3306 -u mikemakuch -pbqzLahG1YNXt6LgS --complete-insert --extended-insert=false frn_api > /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
    
ответ дан Mike Makuch 24.05.2018 в 18:44