SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.08.2011 12:20:42

solka27
Участник
Зарегистрирован: 02.08.2011
Сообщений: 4

О перекачке данных из нескольких баз в одну общую (репликация?)

Имеется основная база на сервере в офисе. С ней работают как работники офиса, так и клиенты через Интернет. Время от времени некоторые сотрудники офиса выезжают на объекты с копиями базы на ноутбуках. Если на объекте есть доступ к Интернет, изменения на ноутбуках должны оперативно попадать в основную базу. Если же нет, то по завершении работы с объектами сотрудники возвращаются в офис и сливают изменения базы в основную базу на сервер. По какой схеме репликации это лучше сделать? Можно ли это делать без остановки основной офисной базы?

Это же получается, что при перекачке данных ноут будет мастером, а основной сервак - слейвом. Одновременной репликации с нескольких мастеров (ноутов) не требуется.Менеджеры могут и по очереди сливать. Но настраивать слейва каждый раз же придется? На каждом ноуте же может быть разный путь к бинлогу и разные имена этих бинлогов и точки, с которых нужно начинать репликацию тоже разные. Это значит, нужно каждый раз перед сливом слейв, т.е. основной сервак останавливать? Вариант нежелательный. Клиенты там через Интерент круглосуточно с базой работают.  Можно ли это все реализовать встроенными средствами репликации mySQL или лучше написать что-то свое?

Неактивен

 

#2 02.08.2011 16:11:32

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

Во первых нужно позаботится чтоб выезжающие сотрудники не изменяли и не удаляли записи, то есть только добавляли.
Во вторых в вашем случае репликация не очень удобное решение, вам нужна двух сторонняя синхронизация.
Попробуй те Maatkit Table Sync , конкретно ваш случай я не проверял как работает, но по описанию по моему это как раз то что нужно.

Неактивен

 

#3 03.08.2011 11:47:24

solka27
Участник
Зарегистрирован: 02.08.2011
Сообщений: 4

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

evgeny написал:

Спасибо! Обязательно изучу!

Неактивен

 

#4 03.08.2011 12:58:05

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

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

Неактивен

 

#5 04.08.2011 12:53:56

kilex
Участник
Откуда: Ижевск
Зарегистрирован: 29.07.2011
Сообщений: 17

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

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

Итак они ездют меняют там все, приезжают на базу. на основном сервере говороим
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='айпи ноута',
MASTER_USER='реплиюзер',
MASTER_PASSWORD='<replication password>',
MASTER_LOG_FILE='вот сюда имя лога сохраненное ранее',
MASTER_LOG_POS=позиция лога сохраненная ранее;
START SLAVE;

теперь show slave status; пока не догонит (секунд отставания должно стать 0)
stop slave;
готово

ессно все это ручками делать геморно, а написать скриптик не вижу никаких проблем.


Инженер ИСЭС
ООО "Марк"

Неактивен

 

#6 04.08.2011 13:00:41

kilex
Участник
Откуда: Ижевск
Зарегистрирован: 29.07.2011
Сообщений: 17

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

хотя коллизии будут решаться всегда в сторону ноутов, а не центральной базы. так что в центральную базу insert only.

ну или ноуты insert only


Инженер ИСЭС
ООО "Марк"

Неактивен

 

#7 05.08.2011 00:11:05

solka27
Участник
Зарегистрирован: 02.08.2011
Сообщений: 4

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

Спасибо! Буду думать в эту сторону. А простите мне мое невежество - при STOP SLAVE с последующей настойкой на нового мастера останавливается именно репликация, сам MySQL продолжает работать и обслуживать пользователей? А то, что офисную БД время от времени надо делать то мастером (это когда реплицируем базу на ноут перед выездом), то слейвом (когда сливаем обратно), перебоями в работе Интернет-пользователей с основной базой никак не скажется (данные эти самые пользователи будут писать/читать в те же таблицы, но работать с другими записями)?  После таких перенастроек перед стартом очередной репликации перезапуск MySQL не требуется?

Отредактированно solka27 (05.08.2011 00:31:02)

Неактивен

 

#8 05.08.2011 08:59:10

kilex
Участник
Откуда: Ижевск
Зарегистрирован: 29.07.2011
Сообщений: 17

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

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

Не требуется, мастер меняется командой CHANGE MASTER TO


Инженер ИСЭС
ООО "Марк"

Неактивен

 

#9 06.08.2011 22:30:18

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

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

Неактивен

 

#10 08.08.2011 09:59:03

kilex
Участник
Откуда: Ижевск
Зарегистрирован: 29.07.2011
Сообщений: 17

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

evgeny написал:

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

почему? в бинлог пишутся и апдейты и делиты - что мешает им выполниться?


Инженер ИСЭС
ООО "Марк"

Неактивен

 

#11 08.08.2011 13:47:04

solka27
Участник
Зарегистрирован: 02.08.2011
Сообщений: 4

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

А действительно, что? Делитов в моем случае у выезжающих не будет. Но апдейтов, пожалуй, даже больше, чем инсертов. Когда офисный работник вернется в офис, его ноут будет выступать в роли мастера, центральная база в роли слейва. Разве с мастера на слейв не ВСЕ изменения пишутся?

Отредактированно solka27 (08.08.2011 13:51:04)

Неактивен

 

#12 08.08.2011 15:55:02

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: О перекачке данных из нескольких баз в одну общую (репликация?)

почему? в бинлог пишутся и апдейты и делиты - что мешает им выполниться?

Я имел виду что может быть ситуация когда агент1 и агент2 в один день обновили одну и туже запись "x" где есть поля "a" и "b".
В случае с репликацией если запускать поочерёдно агент1 потом агент2 то в главной базе будут всегда преобладать записи из агент2, что может не соответствовать логики вашего приложения.

Но апдейтов, пожалуй, даже больше, чем инсертов.

Есть ситуация когда агент1 сделал insert а потом делает update по autoincriment id от прошлого инсерта. В это время на главной базе тоже делаются инсерты и получаются теже ID. В таком случае важно сделать разные autoincriment на всех базах.

Отредактированно evgeny (08.08.2011 15:56:34)

Неактивен

 

Board footer

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