В чем разница между binlog-do-db и replicate-do-db?

Я новичок в MySQL Master-Slave.

и я прочитал два учебника.

  1. Как настроить репликацию MariaDB (Master-Slave)

  2. Настройка репликации MariaDB Master-Slave


В первом уроке. Это делает меня таким

[mysqld] Master section

log-bin

server_id=1

replicate-do-db=employees

bind-address=192.168.0.18


[mysqld] SLAVE Section

server_id=2
replicate-do-db=employees

Но во втором уроке это показывает мне, что

[mysqld] Master
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=unixmen

[mysqld] Slave
server-id = 2
replicate-do-db=unixmen

И почему я должен БЛОКИРОВАТЬ ТАБЛИЦЫ и mysqldump sql, а затем импортировать его?

FLUSH TABLES WITH READ LOCK;


person gclove    schedule 08.06.2017    source источник
comment
эти настройки на самом деле довольно опасны - они приводили к отсутствию данных в наших базах данных - читайте здесь - percona.com/blog/2009/05/14/   -  person JosMac    schedule 12.09.2017


Ответы (1)


ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Чтобы не запутаться, я расскажу о простой настройке 1 Master — 1 Slave. Никаких цепей, никакого мастера-мастера и прочего...

Ваш первый учебник неверен, там должно быть binlog-do-db.

Репликация работает так.

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

binlog-do-db заставляет мастер записывать в свой двоичный журнал только операторы для указанной БД.

replicate-do-db заставляет ведомое устройство просто читать операторы из журнала реле, которые относятся к указанной БД.

replicate-do-db не влияет на мастер, так как нет журнала реле, из которого можно было бы читать.


Часть LOCK TABLES есть, так что данные непротиворечивы. Это предотвращает изменение данных на мастере во время выполнения резервного копирования данных.

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

person fancyPants    schedule 08.06.2017
comment
У меня есть сценарий. У меня есть 2 базы данных A, а у BA есть триггеры вставки для вставки значений в B, а база данных B реплицируется binlog-do-db = B в мастере replicate-do-db = B в журналах подчиненного главного компьютера операторы вставки A, Примечание: я настроена репликация на основе операторов - person Pramodh; 22.04.2019
comment
Извини, приятель, но почему бы тебе просто не попробовать? Я не хочу тратить время на что-то подобное прямо сейчас, потому что это установка, которую я бы никогда не использовал в производстве. Уверен, можно найти решение получше, чем писать триггерами из одной БД в другую. Возможно, вы захотите задать это в отдельном вопросе. Это, конечно, слишком много, чтобы обсуждать здесь в комментариях. - person fancyPants; 23.04.2019