Синхронизация 2х БД MySQL

12
[Удален]
5040

Добрый день всем!

Есть две базы MySQL: master (основная) и slave (та, на которую должны забираться обновлённые данные). Мне необходимо синхронизировать эти 2 базы, то есть если на мастере происходят: добавление, изменение, удаление записей, то на слейве эти изменения должны так же происходить в автоматическом режиме.

отсюда пара вопросов:

1. как это можно реализовать средствами MySQL?

2. как выполнить синхронизацию только отдельных таблиц из этих 2х БД?

3. обязательно ли, чтобы имена таблиц были идентичными? Сам понимаю, что, скорее всего - да, но просто используются разные CMS и допиливание всех запросов в связи с переменой имён таблиц займёт порядком времени..

[Удален]
#1
MrBernz:
отсюда пара вопросов:
1. как это можно реализовать средствами MySQL?

http://dev.mysql.com/doc/refman/5.0/en/replication.html

MrBernz:

2. как выполнить синхронизацию только отдельных таблиц из этих 2х БД?

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

MrBernz:
3. обязательно ли, чтобы имена таблиц были идентичными? Сам понимаю, что, скорее всего - да, но просто используются разные CMS и допиливание всех запросов в связи с переменой имён таблиц займёт порядком времени..

не скажу - не знаю. Скорее всего настраивается - покопайтесьв манах.

На слейве вы можете только делать SELECT, но не DELETE, UPDATE, INSERT!

[Удален]
#2

So1, спасибо за ссылку, на хабре ещё нашёл пост большой - изучаю сейчас

So1:
через игнорирование таблиц. для которых не нужно делать репликацию

ойё, в одной БД 294 таблицы, а в другой 73 =) убийственно, однако

So1:
На слейве вы можете только делать SELECT, но не DELETE, UPDATE, INSERT!

то есть получается так, что на сайте, который использует slave-базу я не смогу уже добавлять, обновлять, удалять записи?

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

N
На сайте с 06.05.2007
Offline
419
#3
через игнорирование таблиц. для которых не нужно делать репликацию

врете. игнорировать таблицы нельзя. можно игнорировать базы данных.

но это может вызвать трудноуловимые глюки, поэтому рекомендуют выставить для игнорируемых таблиц engine=blackhole. таким образом можно игнорировать и таблицы, но трафик на передачу этих обновлений при этом расходуется, конечно.


то есть получается так, что на сайте, который использует slave-базу я не смогу уже добавлять, обновлять, удалять записи?

обычно да.

можно настроить репликацию master-master "по кругу" и обновлять обе базы, но это вызывает еще более трудноуловимые глюки в некоторых видах запросов. постарайтесь что-нибудь придумать чтобы обновлять в одном месте.

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

проблема в том, что вы нескоро узнаете о рассинхронизировавшейся базе.

Кнопка вызова админа ()
[Удален]
#4
netwind:
врете. игнорировать таблицы нельзя. можно игнорировать базы данных.

и правда вру. думал про базы, писал таблицы... сорри.

[Удален]
#5

Спасибо Вам за ответы - буду ещё думать. если будут вопросы - тему апну.. но скорее всего откажусь от репликации и напишу скрипт для обновления полей, потому как если добавление (в моём случае) можно сделать из одного места, то редактирование необходимо выполнять в обоих базах и далее по дате обновление уже сравнивать обе записи.. может быть так

N
На сайте с 06.05.2007
Offline
419
#6
MrBernz:
бавление (в моём случае) можно сделать из одного места, то редактирование необходимо выполнять в обоих базах

проблемы возникают при специфических одновременных редактированиях одной и той же записи:

например

на сервере1 : update tab set val=val+1 where id=123

на сервере2: update tabl set val=val*2 where id=123

оба изменения проигрываются на обоих серверах и на них получаются разные данные, в зависимости от порядка исполнения и НИКАКИХ ОШИБОК репликации не возникает. Просто логическое расхождение. Поэтому master-slave самый безопасный механизм репликации.

что вам мешает при редактировании делать подключение к другой базе данных ?

остальное на сайте будет работать локально, а администраторская часть будет подключаться удаленно к master-серверу.

и если редакторы правят записи по смыслу одинаково, то может и можно игнорировать такой эффект. ну запишется в неизвестном порядке одна из правильных правок и что.

[Удален]
#7
netwind:
что вам мешает при редактировании делать подключение к другой базе данных ?
остальное на сайте будет работать локально, а администраторская часть будет подключаться удаленно к master-серверу.

получается, что: подключились для редактирования из сайта slave к сайту master, отредактировали и система репликации уже сама переносит изменения с мастера на слейва?

интересная мысль - подумаю обязательно над этим способом! Спасибо!

ydn
На сайте с 12.05.2010
Offline
12
ydn
#8

А какая необходимость в двух базах? Если базы идентичны, то по-моему проще использовать одну базу, сразу отпадает вопрос о синхронизации, левых ошибках ну и прочих сложностей

Вёрстка xHTML ● WordPress > Вёрстка, программирование, настройка, консультации (/ru/forum/526726) Вёрстка на халяву (/ru/forum/569543) ICQ 853588 | Написать мне личное сообщение ()
N
На сайте с 06.05.2007
Offline
419
#9
ydn:
А какая необходимость в двух базах? Если базы идентичны, то по-моему проще использовать одну базу

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

ydn
На сайте с 12.05.2010
Offline
12
ydn
#10
netwind:
чтобы быстро открывался. вот вылетит сайт из индекса - узнаете почему это важно.

Если обе бд на одном сервере, то по-моему нет разницы в скорости. Или я ошибаюсь? И при чем тут вылет одного сайта из индекса? Базы идентичны же, а как они используются на этих двух сайтах не известно нам

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий