Назад | Перейти на главную страницу

Репликация полукруга Master-Slave не работает в MySQL

Я не знал, как это описать, поэтому назвал его полукругом. Вот что я делаю.

Сервер А
Сервер B = Это подчиненный сервер A
Сервер C = Это подчиненный сервер B

Когда я что-то обновляю на сервере A, это отражается на сервере B. Но это же изменение не отражается на сервере C.

Только когда я что-то обновляю на сервере B, это изменение отражается на сервере C.

Как сделать так, чтобы любые изменения, сделанные на сервере A, приходили на сервер B (который уже работает), а затем на сервер C?

РЕДАКТИРОВАТЬ
Проведя расследование, я обнаружил, что когда я вношу некоторые изменения на сервере A, его положение в файле журнала меняется. Но когда эти изменения отражаются на сервере B, положение файла журнала сервера B не меняется. Именно по этой причине сервер C не знает, были ли какие-либо изменения на сервере B, если я явно не изменю что-то (вставка, обновление, удаление) на сервере B.

Итак, есть ли способ сообщить MySQL об увеличении позиции файла журнала, когда Slave получает обновления от Master?

FYI - это обычно называется цепочкой ретрансляции репликации. Чтобы включить это, вам необходимо убедиться, что на сервере B установлены следующие параметры:

log_bin
log_slave_updates

Это укажет серверу B обновить свою позицию в журнале, когда будут получены обновления от A. Документацию для этого можно найти Вот (курсив мой):

Обычно подчиненное устройство не записывает никаких обновлений, полученных от главного сервера, в свой собственный двоичный журнал. Эта опция заставляет ведомое устройство записывать обновления, выполненные его потоком SQL, в его собственный двоичный журнал. Чтобы эта опция имела какой-либо эффект, ведомое устройство также должно быть запущено с --log-bin опция для включения двоичного журнала. --log-slave-updates используется, когда вы хотите связать серверы репликации. Например, вы можете настроить серверы репликации, используя эту схему.

A -> B -> C

Здесь A служит ведущим для ведомого B, а B служит ведущим для ведомого C. Чтобы это работало, B должен быть и ведущим, и ведомым. Вы должны начать как A, так и B с --log-bin для включения двоичного журнала и B с --log-slave-updates вариант, чтобы обновления, полученные от A, записывались B в свой двоичный журнал.