Один раб, кілька господарів MySql


9

Чи можна налаштувати MySql Replication, щоб один раб прослуховував двох різних майстрів?

Відповіді:


3

За задумом, один процес mysqld не може одночасно слухати двох різних майстрів.

Команда CHANGE MASTER TO дозволяє встановити лише один Master як джерело для читання.

Щоб наслідувати це, вам доведеться програмно чергувати два майстри. Як ти це робиш ?

У StackOverflow я описав, як підключити підлеглого вручну до різних майстрів, де кожен Майстер був ноутбуком, а Раб - центральним комп'ютером.

Ось основна ідея

  • Майстер М1
  • Майстер М2
  • Раб S1

Установіть реплікацію від M1 до S1, а потім від M2 до S1 так

  • 1) Запустити S1 запустити ЗМІНИ МАЙСТЕР НА М1 як джерело
  • 2) НАЧАЛО СЛОВА;
  • 3) Запустіть реплікацію ще трохи
  • 4) СТОП СЛОВА;
  • 5) Запустити S1 запустити ЗМІНИ МАЙСТЕР НА М2 як джерело
  • 6) НАЧАЛО СЛОВА;
  • 7) Запустіть реплікацію ще трохи
  • 8) СТОП СЛОВА;
  • 9) Поверніться до кроку 1

Кожен раз, коли ви переходите від одного головного до іншого, ви повинні записувати два значення з SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

Ці два значення представляють останню заяву SQL, що надійшла від головного пристрою і повинна бути виконана на підлеглому.

Є одна головна обережність: Поки M1 і M2 оновлюють взаємовиключні бази даних, цей алгоритм повинен бути просто чудовим.

Вірити чи ні, я звернувся з таким питанням у ServerFault ще в травні 2011 року. Я насправді пояснив, як наслідувати справжній мультимайстер / одиночний підлеглий за допомогою механізму зберігання BLACKHOLE, заснованого на книзі "Висока продуктивність MySQL".


Хоча мені це ще не дуже потрібно, я думав над цим питанням раніше. Чи не вдалося б в основному передати бінлог другого майстра в раб mysql? Я думаю, що найкраще було б мати інструмент, який також слідкує за результатами кожного запиту і зупиняється на помилці, як це робить звичайний підлеглий потік реплікації. Але по суті проста труба повинна зробити теж. Звичайно, обидва майстри, що записують в одну базу даних / таблицю, швидко стануть хитрими. Щось над вами гуру задуматися?
Яннес

1
Я думаю, що варто додати до своєї відповіді, що навіть якщо MySQL 5.6 цього не робить, 5.7 підтримуватиме кілька майстрів.
Філ Сумнер

4

Рішення Роландо має багато застережень. Перший, що є одним потоком реплік, обов'язково не реплікується, тоді як другий працює. Це надасть вам періоди часу, коли ваш раб перебуває поза синхронізацією. Тепер вам належить зіграти тонкий балансуючий акт, щоб переконатися, що кожен має достатньо часу, щоб наздогнати, коли він має свою чергу.

Як описано, вам також доведеться грати у зберігач книг журналів, щоб повернутися назад. Це справді просто здається баггі, відкриваючи вікно для відсутніх або непослідовних даних або навіть порушуючи реплікацію, коли вона йде не так (або викликана навіть просто помилкою "вимкнення однієї" в положенні журналу)

Я рекомендую просто запустити кілька екземплярів mysql. Ніщо не заважає вам запустити два і більше mysql на одній машині. Вони, звичайно, не можуть працювати на одному порті. Я насправді не вважаю це проблемою, хоча кожен клієнт та бібліотека дозволяють вказати щось, що не є 3306.

Просто вкажіть порт = 3307 (або що завгодно в одному з .cnf-файлів).

Ви також захочете подбати про те, щоб окремо налаштовані пуфи буфера та інші конфігурації пам'яті не розходилися між собою. Це насправді користь, хоча ви зможете більш тонко налаштувати ці налаштування під конкретні вимоги окремих баз даних, які копіюються.

Таким чином у вас просто два потоки реплікації, що працюють на одному сервері; ніколи позаду, не потрібно зберігати книгу, не потрібно сценарій "заміни".


Я радий, що хтось розуміє безумство бухгалтерського обліку. Гарна відповідь також. +1 !!!
RolandoMySQLDBA


0

MariaDB, який може бути замінений на MySql, може бути використаний. Він підтримує його з версії 10.2

Проблема з підтримкою Mysql 5.7 - необхідність GTID, тобто головний ОБОВ'ЯЗКОВО також бути змінений, у випадку MariaDb це не так.

Приклад / HowTo посилання: http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.