SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.03.2022 08:34:30

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Синхронизация двух и более БД, версионирование базы данных

Подскажите пожалуйста, для работы с файловой системой есть git, есть Total Commander где можно сравнить и найти различие в двух папках.

Как в случае с MySQL организовать синхронизацию двух и более БД? Какие есть утилиты и инструменты.
Хотелось бы:

1) разрешение конфликтов (когда у двух записей с одним id разное содержимое)
2) добавление несуществующих данных
3) удаление несуществующих записей.

В принципе описываю то, что могу делать в PHPStorm при работе с git-ом.

Также как возможно организовать версионизацию данных в БД? По аналогии с коммитами в Git?
Нужно для отслеживания изменений в БД (что добавляли, что удаляли).

Неактивен

 

#2 04.03.2022 09:39:19

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Синхронизация двух и более БД, версионирование базы данных

С помощью тех же миграций я могу всегда восстановить структуру данных, потому что описание миграций сохраняется в git.
Но не смогу восстановить данные в таблицах. Как обычно сохраняют данные, что бы их в случае чего можно было восстановить?

Неактивен

 

#3 04.03.2022 17:38:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Синхронизация двух и более БД, версионирование базы данных

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

1. Про версионирование. Есть два подхода к этой задаче.

1а. В структуре таблиц вы создаете дополнительное поле, которое характеризует изменение (прямо — «вставка», «обновление», «удаление»). В такую таблицу вы всегда физически вставляете строки, но с нужным значением поля. Пример: вставка, а затем удаление строки:

| id | action | data            |
|  1 | insert | This is my data |
|  1 | delete | -               |

Плюс — все изменения доступны. Минус — вычитывать данные из такой таблицы достаточно тяжело.

1b. Бэкапы. Просто делайте бэкап раз в сколько-то времени. Так у вас будет консистентное состояние базы на нужный момент, и вы сможете его восстановить. Плюс — понятная работа с данными. Минус — данные не доступны «здесь и сейчас», и их нужно восстанавливать.

2. Про сравнение. Сравнение хорошо работает только для небольших таблиц, потому что по смыслу это квадратичная операция от количества строк (может быть уменьшена до N log N, если сравнивать только по первичному ключу, но всё равно эта штука растет достаточно быстро, особенно учитывая, что за каждой строкой нужно будет лезть на диск в какой-то момент).

Если у вас есть две таблицы, которые вы хотите сравнить, то можно построить запрос а-ля intersect:
https://stackoverflow.com/questions/950 … two-tables

Можно попробовать поиспользовать какие-то готовые утилиты типа pt-table-sync с --dry-run --print
https://www.percona.com/doc/percona-too … -sync.html

Неактивен

 

#4 09.03.2022 15:39:22

Slorvengo
Завсегдатай
Зарегистрирован: 08.08.2013
Сообщений: 46

Re: Синхронизация двух и более БД, версионирование базы данных

Спасибо за ответ.
Но хотелось бы услышать какие-то более простые решения. У меня пока не очень большая БД.
Иногда могу перезаписать тот контент который нужен.
Иногда могу удалить не то что нужно.

Хотелось бы как-то это все иметь возможность восстановить.
Можно ли как то делать бэкап по версиям - buckup_10.20.2022:12-12-12
Как-то так...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson