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

Насколько быстро выполняется репликация MySQL?

Я подумываю о настройке репликации нашей базы данных mysql, чтобы иметь возможность иметь локальные подчиненные устройства в каждом из наших филиалов, в то время как мастер в главном офисе для повышения производительности приложений (значительно) в наших филиалах.

Сам db не такой большой (<1 ГБ), но мне интересно; с учетом максимумов 200-300 обновлений записей / мин: какова скорость репликации? (при условии, что во-первых, стандартное dsl-соединение 5 МБ, при необходимости быстрее - стараемся снизить расходы, но деньги есть на большее)

Реплицируются ли целые таблицы партиями? Выполняется ли репликация по запросу, когда каждая запись в таблице обновляется (из документации, я думаю, я вижу, что это настраивается)?

Ноты:

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

Репликация с несколькими мастерами делает то же самое, но в обоих направлениях.

Некоторые базовые расчеты помогут вам лучше определить потребности в пропускной способности.

Average transaction size * number of slaves * updates/minute = bandwidth needed

Надеюсь это поможет.

Репликация на стороне ведомых устройств выполняется двумя независимыми потоками.

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

Задержка репликации ограничивается вводом-выводом, во-первых, вводом-выводом в подчиненной базе данных для применения транзакций из журнала реле (который может включать сложные SQL-запросы) и, во-вторых, вводом-выводом на главном устройстве, чтобы прочитать его двоичный журнал и передать его каждому подчиненному устройству.

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

Репликация в MySQL позволяет довольно быстро передать данные ведомому устройству (быстрее, чем вы сможете запустить UPDATE на главном устройстве и переключитесь в другое окно, чтобы запустить SELECT на рабу, если (и только если) все сетевые подключения установлены и все работает нормально. Любое соединение класса DSL должно быть подходящим для общего случая ваших обычных небольших запросов, но большие запросы вставки / обновления могут занять некоторое время для копирования и повторной синхронизации в случае репликации (а MySQL жестоко склонен к те, к сожалению) займет некоторое время (повторное копирование всей базы данных из мастера). Есть уловки, чтобы ограничить влияние ресинхронизации на ваш главный сервер, например, размещение MySQL на LVM, чтобы вы могли сделать очень быструю блокировку / снимок и синхронизировать содержимое снимка с подчиненным устройством, но в конечном итоге повторная синхронизация будет отстой.