Перейти к содержимому

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

  • автор:

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

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

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

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

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

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

Понятно, что делается 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 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *