MySQL в топологии "звезда"

У меня есть одна центральная база данных со всеми данными в MySQL 5.1-последняя-стабильный.
Я хочу подключить несколько клиентов в отношениях мастер-мастер.

вопрос

Как настроить топологию star с 1 центральным сервером посередине с несколькими клиентскими базами данных, чтобы изменения в одном клиенте распространялись сначала на центральный сервер, а оттуда на все другие клиентские базы данных?

база данных

Я использую inno-db для все таблицы, и я включил двоичный журнал.
Кроме этого, я научился делать мастер-мастер между базами данных.
Все таблицы имеют первичные ключи primary integer autoincrement. Где autoincrements смещения и начать работать на разных клиентских базах данных не имеют первичного ключа конфликты.

Почему я хочу это

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

3 ответов


учитывая требование использовать круговую репликацию MySQL против плавающих рабов в качестве средства синхронизации DBs, вот решение:

1 DB Master
4 DB Slaves


НАСТРОЙКА DB MASTER

  1. Установить MySQL 5.1.x
  2. убедитесь, что / etc / my.cnf
          server-id=1
          log-bin=mysql-bin
          expire-logs-days=14
          по умолчанию-storgae-engine=InnoDB
  3. Запуск MySQL
  4. RESET MASTER; (очистить двоичные журналы от DB Master)
  5. загрузить данные в Master
  6. GRANT SELECT, РАБ РЕПЛИКАЦИИ НА . репликатору@'%', определяемому 'REPL-password';

НАСТРОЙКА БД Рабы!--8-->

  1. Установить MySQL 5.1.x
  2. убедитесь, что /etc / my.cnf
          server-id=(уникальный идентификатор сервера)
          log-bin=mysql-bin
          по умолчанию-storage-engine=InnoDB
  3. Запуск MySQL
  4. изменить MASTER на MASTER_HOST= 'IP-адрес DB Master', MASTER_PORT=3306, MASTER_USER=' replicator', MASTER_PASSWORD=' repl-password', MASTER_LOG_FILE= ' mysql-bin.000001', Master_log_pos опция=106;
  5. Start SLAVE; (пусть репликация догонит, проверьте SHOW SLAVE STATUS\G)
  6. ОСТАНОВИТЬ РАБА;
  7. изменить MASTER на MASTER_HOST= 'IP-адрес мастера распространения БД', MASTER_PORT=3306, MASTER_USER= 'replicator', MASTER_PASSWORD=' repl-password', MASTER_LOG_FILE= ' mysql-bin.000001', master_log_pos опция=106;
  8. ЗАПУСТИТЬ SLAVE;

ИМПОРТ

Как только каждый раб DB подготовлено, теперь миграция данных между DB Master и DB Slave может продолжаться следующим образом (DM для DB Master и DS для DB Slave):

  1. на DS запустите показать состояние MASTER;
  2. на DS запишите двоичное имя файла журнала и позицию
  3. на ДМ, запустить изменения в IP-адрес MASTER_HOST='ДС', MASTER_PORT=3306, репликатор, MASTER_USER='', репл-пароль, MASTER_PASSWORD='', MASTER_LOG_FILE='журнал Шаг 2', master_log_pos опция=(LogPos от Шаг2);
  4. на DM запустите Start SLAVE; (пусть репликация догонит; изменения порта, введенные DS в DM)
  5. на DM, остановить SLAVE;
  6. на DS, строка записи 2 /var/lib/mysql / master.info (файл журнала)
  7. на ДС, запись в строке 3 в /var/библиотека/MySQL в/мастер.информация (войдите в положение)
  8. на DS запустите CHANGE MASTER в MASTER_HOST= 'IP-адрес DM', MASTER_PORT=3306, MASTER_USER= 'replicator', MASTER_PASSWORD= 'repl-password', MASTER_LOG_FILE= ' LogFile От Step6', MASTER_LOG_POS=(LogPos от Step7);
  9. на DS запустите Start SLAVE; (пусть репликация догонит; изменения порта, введенные DM в DS)
  10. на DS, остановить SLAVE;

предостережение

процесс импорта имеет решающее значение !!! Вы должны записывать точный файл журнала и позицию журнала правильно каждый раз.

дайте ему попробовать !!!

Дайте мне знать, как она идет !!!


Это звучит как задание специального типа топологии репликации MySQL

топология, которую я имею в виду, называется "Мастер распределения", которая исходит из страниц 368-370 книги высокая производительность MySQL: оптимизация, резервное копирование, репликация и многое другое под подзаголовком " хозяин, хозяин распределения и рабы."

вам понадобится следующее

1 DB Master Server
1 DB мастер распределения (известный как / dev / null Slave, или смартфона раб)
Любое количество рабов DB


НАСТРОЙКА DB MASTER

  1. Установить MySQL 5.1.x
  2. убедитесь, что /etc / my.cnf
          server-id=1
          log-bin=mysql-bin
          expire-logs-days=14
          по умолчанию-storgae-engine=InnoDB
  3. Запуск MySQL
  4. RESET MASTER; (очистить двоичные журналы от DB Master)
  5. загрузить в Данные в Master
  6. GRANT SELECT, РАБ РЕПЛИКАЦИИ НА . репликатору@'%', определяемому 'REPL-password';

НАСТРОЙКА МАСТЕРА РАСПРЕДЕЛЕНИЯ БД

  1. Установить MySQL 5.1.x
  2. убедитесь, что / etc / my.cnf
          server-id=2
          log-bin=mysql-bin
          expire-logs-days=14
          по умолчанию-storage-engine=BLACKHOLE
          пропустить-InnoDB в
  3. Запуск MySQL
  4. изменить MASTER на MASTER_HOST= 'IP-адрес DB Master', MASTER_PORT=3306, MASTER_USER=' replicator', MASTER_PASSWORD=' repl-password', MASTER_LOG_FILE= ' mysql-bin.000001', master_log_pos опция=106;
  5. ЗАПУСТИТЬ SLAVE;
  6. грант ВЫБЕРИТЕ, РАБ РЕПЛИКАЦИИ НА . репликатору@'%', определяемому 'REPL-password';
  7. для каждой таблицы, которая не находится в базе данных information_schema и не в базе данных mysql, преобразуйте каждую таблицу в механизм хранения BLACKHOLE следующим образом: ALTER TABLE TBLNAME ENGINE=BLACKHOLE;
  8. RESET MASTER; (очистить двоичные журналы из DB Distribution Master)

НАСТРОЙКА РАБОВ БД

  1. установить MySQL 5.1.x
  2. убедитесь, что /etc / my.cnf
          server-id=3
          по умолчанию-storage-engine=InnoDB
  3. Запуск MySQL
  4. изменить MASTER на MASTER_HOST= 'IP-адрес DB Master', MASTER_PORT=3306, MASTER_USER=' replicator', MASTER_PASSWORD=' repl-password', MASTER_LOG_FILE= ' mysql-bin.000001', master_log_pos опция=106;
  5. Start SLAVE; (пусть репликация догонит, проверьте SHOW SLAVE STATUS\G)
  6. остановить Раб;
  7. изменить MASTER на MASTER_HOST= 'IP-адрес мастера распространения БД', MASTER_PORT=3306, MASTER_USER= 'replicator', MASTER_PASSWORD=' repl-password', MASTER_LOG_FILE= ' mysql-bin.000001', master_log_pos опция=106;
  8. ЗАПУСТИТЬ SLAVE;

цель установки ths состоит в том, чтобы иметь DB Master only process SQL, предназначенный только для DB Master. SQL, реплицируемый в подчиненные БД, обрабатывается мастером распространения БД. Это облегчит мастер БД, обрабатывающий передачу SQL на ведомое устройство; это становится ответственностью мастера распределения БД. Все рабы считывают изменения SQL из Мастера распространения БД, а не из Мастера БД.

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


предостережение

возможно, вам придется провести серьезное тестирование на рабах БД, чтобы убедиться, что данные не исчезают из-за настройки BLACKHOLE. Если это произойдет, попробуйте удалить "default-storage-engine=BLACKHOLE" и перезагрузить все.


будущие вопросы такого рода следует задавать в dba.stackexchange.com


Да, вы можете настроить несколько баз данных MySQL в описанной вами топологии.

Что вы хотите сделать, называется репликацией.

здесь репликация раздел из руководства MySQL 5.1.