Как сравнить две базы данных на разных хостах?
Есть две базы данных на разных хостах. На втором она развернута из дампа и теоретически должна совпадать с первой. Но в первую базу может что-то писаться, а вторая могла плохо восстановиться из дампа (не все таблицы впилились).
Как сравнить две базы данных (на разных хостах)?
Как увидеть, есть ли разные записи, и какие?
Совпадает ли их количество?
Как увидеть, что структура таблиц одинаковая/разная?
Понятно, что делается dump-restore, но хочется проверить, что оно правильно восстановилось, как положено, и никакие данные из БД не потерялись.

dopedopedope ★
25.07.16 03:11:54 MSK

Интересный вопрос. Тоже интересно узнать как это можно сделать. Пока же самое простое решение это сделать mysqldump для обеих баз и сравнить текстовые файлы.
ProtoH
( 25.07.16 03:20:58 MSK )

Экспорт в XML обеих баз, дальше diff.
Northsoft ★★
( 25.07.16 05:37:10 MSK )

pt-table-checksum из Percona Toolkit поможет.
realloc ★★★★
( 25.07.16 05:42:31 MSK )

pt-table-checksum — покажет что есть разница (как писали выше)
pt-table-sync — сделает синхронизацию (точнее выполнит запросы которые нужны для этого, можно просто вывести список запросов, которые необходимы для синхронизации, не выполняя их).
Но между этими серверами должна быть настроена репликация. С некотрыми структурами таблиц pt-table-checksum работает не очень, например если ключ состоит из нескольких полей. С таблицами без primary ключей вроде совсем не работает.
demsi ★
( 25.07.16 06:46:11 MSK )
Последнее исправление: demsi 25.07.16 06:46:26 MSK (всего исправлений: 1)

Как сравнить две базы данных (на разных хостах)?
mysqldump и потом сравнивать оутпуты.
а при restore были какие-то ошибки ?
dada ★★★★★
( 25.07.16 09:41:33 MSK )
Ответ на: комментарий от dada 25.07.16 09:41:33 MSK

Нет вроде. Это теоретически.
Короче пока такой вариант вижу. Открыть каким-то GUI для MySQL и посмотреть информацию по этой базе данных.
А потом по другой и сравнить их.
dopedopedope ★
( 25.07.16 22:08:14 MSK ) автор топика
Последнее исправление: dopedopedope 25.07.16 22:09:03 MSK (всего исправлений: 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 ★★
( 27.07.16 05:00:53 MSK )
Ответ на: комментарий от frozen_twilight 27.07.16 05:00:53 MSK

mysqlshow -v -v -u root
Выдает по базе данных все таблицы списком с указанием числа колонок и строк в кажой таблице.
Т.е. эту команду выполняю на старом и новом хосте, и потом сравниваю каким-нибудь diff-ом.
На это в общем-то можно ориентироваться вроде, не?
Конечно, в теории, возможно, когда количество строк и столбцов при их сравнении останется неизменным, хотя данные внутри строк могли поменяться.
В данном случае, мне просто проконтролировать нужно, что данные перенеслись в полном объеме.
dopedopedope ★
( 28.07.16 21:19:46 MSK ) автор топика
Последнее исправление: dopedopedope 28.07.16 21:24:53 MSK (всего исправлений: 2)
Ответ на: комментарий от dopedopedope 28.07.16 21:19:46 MSK

В данном случае, мне просто проконтролировать нужно, что данные перенеслись в полном объеме.
Ты боишься, что не всё, из имеющегося дампа попало в новую базу? Или, что дамп побился при копировании с одного хоста на другой? Или же, что пока ты копировал и заливал дамп, в первую базу что-то добавилось?
shell-script ★★★★★
( 28.07.16 21:25:38 MSK )
Ответ на: комментарий от shell-script 28.07.16 21:25:38 MSK

И то, и то, и то. Для контроля, да.
Кстати, сравнивал размеры таблиц, они отличаются. Но это должно мало парить, интернет говорит, что это связано с фрагментацией файловой системы.
dopedopedope ★
( 28.07.16 21:28:22 MSK ) автор топика
Последнее исправление: dopedopedope 28.07.16 21:29:55 MSK (всего исправлений: 1)
Сравнение содержимого двух MySQL баз данных
Есть 2 базы данных по 150 ГБ в развёрнутом виде каждая, в сущности это одна база, но дампы с разницей в несколько месяцев. Развёрнуты они временно на виртуальной машине под Ubuntu. Необходимо их сравнить по содержимому и добавить в более старую базу данных записи из новой. Не нашел никаких инструментов хороших, чтобы проделать такое, руками делать это не реально. Из того, что уже попробовал - Novicat, но он при попытке сравнить базы данных безнадёжно зависает и процесс умирает. За любую помощь буду крайне признателен, ибо с таким ещё не сталкивался.
Отслеживать
задан 3 окт 2021 в 20:56
navasiolau navasiolau
178 9 9 бронзовых знаков
Я когда-то давно пробовал инструменты dbForge (правда, для Sql Server). Для MySql тоже есть. Но я не знаю, как оно на больших объёмах данных.
4 окт 2021 в 5:20
Необходимо их сравнить по содержимому и добавить в более старую базу данных записи из новой. А что насчёт записей, которые есть в старой, но отсутствуют в новой? оставлять? А если они конфликтуют с новой записью по неключевому уникальному индексу? PS. Если надо "и добавить" - то нафига сравнивать? просто INSERT IGNORE - оно в процессе добавления само сравнится.
4 окт 2021 в 6:49
Если есть в новой - надо добавить, если конфликт - данные из новой заменяют старые. А как INSERT IGNORE применить к целой базе данных?
Форум пользователей MySQL
Всем привет. Как обычно просьба ламера составить запрос
Есть БД "main" и "old". В первой базе таблица "members", во второй "users". Нужно сравнить значения в таблицах в полях "name " и "username" соответственно, и если в таблице users нет записи соответствующей полю в таблице members, то вывести результат этого поля. Надеюсь понятно объяснил. Заранее спасибо за ответы.
#2 26.02.2013 21:58:58
deadka Администратор Зарегистрирован: 14.11.2007 Сообщений: 2417
Re: Сравнение данных из 2 таблиц разных БД
SELECT `name` FROM `main`.`members` WHERE `name` NOT IN ( SELECT `username` FROM `old`.`users` ) ;
Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли.
#3 11.07.2013 09:13:16
collerperm Участник Откуда: Пермь Зарегистрирован: 26.02.2013 Сообщений: 2
Re: Сравнение данных из 2 таблиц разных БД
Спасибо, помогло. Если можно, немного оффтопа в рамках моей темы.
В рамках одной базы есть 2 таблицы - users и profile
В каждой из них есть одинаковые поля user_id
Нужно добавить строку в таблицу profile если она не существует с полем user_id= user_id.users плюс пару ячеек со статичными данными.
#4 11.07.2013 09:52:56
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5823
Re: Сравнение данных из 2 таблиц разных БД
select u.user_id from `users` u left join profile p using ( user_id ) where p.user_id is null ; -- вернет список user_id, которые есть в первой таблице и отсутствуют во второй.
Как сравнить две базы данных?
Уважаемый Хабр, я верю в силу твоего коллективного разума и надеюсь получить подсказку.
Есть две, практически одинаковые, базы данных, с одинаковой структурой и данными. Одинаковые, да не совсем. На одной из баз запрос на выборку выводит результат меньше чем за 1 секунду, во второй — тот же запрос работает около 4-х секунд. Причем база которая работает быстрее — больше по объему данных. Дело не в аппаратной части, базы одинаково работают на разных серверах — одна быстрее, другая медленнее. Как можно сравнить содержимое БД, таблицы, функции, чтобы найти различия? Или куда вообще копать?
UPD. Попробовал сделать так: Развернул структуру с «медленной» базы и хотел развернуть туда данные с «быстрой» — выдало ошибки. Взял структуру с «быстрой» базы и развернул туда данные с медленной — так же медленно выполняется запрос.
- Вопрос задан более трёх лет назад
- 12322 просмотра