LINUX.ORG.RU
ФорумAdmin

Как сравнить две базы данных на разных хостах?

 ,


1

1

Есть две базы данных на разных хостах. На втором она развернута из дампа и теоретически должна совпадать с первой. Но в первую базу может что-то писаться, а вторая могла плохо восстановиться из дампа (не все таблицы впилились).

Как сравнить две базы данных (на разных хостах)?

Как увидеть, есть ли разные записи, и какие?

Совпадает ли их количество?

Как увидеть, что структура таблиц одинаковая/разная?

Понятно, что делается dump-restore, но хочется проверить, что оно правильно восстановилось, как положено, и никакие данные из БД не потерялись.

Спасибо.

Интересный вопрос. Тоже интересно узнать как это можно сделать. Пока же самое простое решение это сделать mysqldump для обеих баз и сравнить текстовые файлы.

ProtoH
()

Экспорт в XML обеих баз, дальше diff.

mysqldump -X

Northsoft ★★
()

pt-table-checksum из Percona Toolkit поможет.

realloc ★★★★
()

pt-table-checksum - покажет что есть разница (как писали выше)
pt-table-sync - сделает синхронизацию (точнее выполнит запросы которые нужны для этого, можно просто вывести список запросов, которые необходимы для синхронизации, не выполняя их).
Но между этими серверами должна быть настроена репликация. С некотрыми структурами таблиц pt-table-checksum работает не очень, например если ключ состоит из нескольких полей. С таблицами без primary ключей вроде совсем не работает.

demsi
()
Последнее исправление: demsi (всего исправлений: 1)

Как сравнить две базы данных (на разных хостах)?

mysqldump и потом сравнивать оутпуты.
а при restore были какие-то ошибки ?

dada ★★★★★
()
Ответ на: комментарий от dada

Нет вроде. Это теоретически.

Короче пока такой вариант вижу. Открыть каким-то GUI для MySQL и посмотреть информацию по этой базе данных.

А потом по другой и сравнить их.

dopedopedope
() автор топика
Последнее исправление: dopedopedope (всего исправлений: 1)

Как увидеть, что структура таблиц одинаковая/разная?

Из совсем элементарного: mysqldump --no-data + diff/sdiff

sdiff <(mysqldump --host=host1 --no-data --compact db_name) <(mysqldump --host=host2 --no-data --compact db_name)

frozen_twilight ★★
()
Ответ на: комментарий от frozen_twilight

Нашел такое:

mysqlshow  -v -v -u root <db_name>

Выдает по базе данных все таблицы списком с указанием числа колонок и строк в кажой таблице.

Т.е. эту команду выполняю на старом и новом хосте, и потом сравниваю каким-нибудь diff-ом.

На это в общем-то можно ориентироваться вроде, не?

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

В данном случае, мне просто проконтролировать нужно, что данные перенеслись в полном объеме.

dopedopedope
() автор топика
Последнее исправление: dopedopedope (всего исправлений: 2)
Ответ на: комментарий от dopedopedope

В данном случае, мне просто проконтролировать нужно, что данные перенеслись в полном объеме.

Ты боишься, что не всё, из имеющегося дампа попало в новую базу? Или, что дамп побился при копировании с одного хоста на другой? Или же, что пока ты копировал и заливал дамп, в первую базу что-то добавилось?

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

И то, и то, и то. Для контроля, да.

Кстати, сравнивал размеры таблиц, они отличаются. Но это должно мало парить, интернет говорит, что это связано с фрагментацией файловой системы.

dopedopedope
() автор топика
Последнее исправление: dopedopedope (всего исправлений: 1)

снять plain оттуда и оттуда и сравнить? Вроде даже какой-то софт делает sql диффы.

targitaj ★★★★★
()
22 июня 2018 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.