A.14 MySQL 5.7 FAQ: Репликация
В следующем разделе мы приводим ответы на наиболее часто задаваемые вопросы о репликации MySQL.
- A.14.1. Должен ли реплика быть постоянно подключен к источнику?
- A.14.2. Необходимо ли включать работу сети на моем источнике и реплике для включения репликации?
- A.14.3. Как узнать, насколько реплика отстает от источника? Другими словами, как узнать дату последнего заявления, реплицированного репликой?
- A.14.4. Как заставить источник блокировать обновления, пока реплика не догонит?
- A.14.5. Какие проблемы следует учитывать при настройке двунаправленной репликации?
- A.14.6. Как я могу использовать репликацию для повышения производительности моей системы?
- A.14.7. Что следует сделать для подготовки клиентского кода в моих собственных приложениях для использования репликации, повышающей производительность?
- A.14.8. Когда и насколько репликация MySQL может улучшить производительность моей системы?
- A.14.9. Как я могу использовать репликацию для обеспечения избыточности или высокой доступности?
- A.14.10. Как узнать, использует ли сервер-источник репликации формат бинарного журналирования на основе инструкций или на основе строк?
- A.14.11. Как указать реплике использовать репликацию на основе строк?
- A.14.12. Как предотвратить репликацию инструкций GRANT и REVOKE на машины-реплики?
- A.14.13. Работает ли репликация на смешанных операционных системах (например, источник работает на Linux, а реплики работают на macOS и Windows)?
- A.14.14. Работает ли репликация на смешанных аппаратных архитектурах (например, источник работает на 64-разрядной машине, а реплики работают на 32-разрядных машинах)?
|
A.14.1. |
Должен ли реплика быть постоянно подключен к источнику? |
|
Нет, не должен. Реплика может выйти из строя или оставаться отключенной в течение нескольких часов или даже дней, а затем снова подключиться и наверстать упущенные обновления. Например, вы можете настроить отношение источник/реплика по телефонной линии, где линия работает только периодически и короткие промежутки времени. Это означает, что в любой момент времени реплика не гарантированно синхронизирована с источником, если вы не примете каких-либо специальных мер. Чтобы обеспечить возможность догонки для реплики, которая была отключена, вы не должны удалять файлы бинарных журналов из источника, которые содержат информацию, которая еще не была реплицирована на реплики. Асинхронная репликация может работать только в том случае, если реплика может продолжить чтение бинарного журнала с того места, где она последний раз читала события. |
|
|
A.14.2. |
Необходимо ли включать работу сети на моем источнике и реплике для включения репликации? |
Да, работа сети должна быть включена на источнике и реплике. Если работа сети не включена, реплика не сможет подключиться к источнику и передать бинарный журнал. Убедитесь, что системная переменная |
|
|
A.14.3. |
Как узнать, насколько реплика отстает от источника? Другими словами, как узнать дату последнего заявления, реплицированного репликой? |
|
Проверьте столбец Когда поток SQL репликации выполняет событие, считанное из источника, он изменяет свое собственное время на метку времени события. (Вот почему |
|
|
A.14.4. |
Как заставить источник блокировать обновления, пока реплика не догонит? |
|
Используйте следующую процедуру:
|
|
|
A.14.5. |
Какие проблемы следует учитывать при настройке двунаправленной репликации? |
|
В настоящее время репликация MySQL не поддерживает никаких протоколов блокировки между источником и репликой для гарантии атомарности распределенного (межсерверного) обновления. Другими словами, клиент A может выполнить обновление для co-source 1, и тем временем, до того, как оно распространится на co-source 2, клиент B может выполнить обновление для co-source 2, которое заставит обновление клиента A работать иначе, чем на co-source 1. Таким образом, когда обновление клиента A попадает на co-source 2, оно создает таблицы, которые отличаются от того, что у вас есть на co-source 1, даже после того, как все обновления из co-source 2 также распространились. Это означает, что вы не должны связывать два сервера вместе в двунаправленном отношении репликации, если вы не уверены, что ваши обновления могут безопасно происходить в любом порядке, или если вы каким-то образом не позаботитесь о неправильно упорядоченных обновлениях в клиентском коде. Вы также должны понимать, что двунаправленная репликация на самом деле не очень сильно улучшает производительность (если вообще улучшает) в отношении обновлений. Каждый сервер должен выполнять то же количество обновлений, как если бы у вас был один сервер. Единственная разница в том, что немного меньше конфликтов блокировок, потому что обновления, инициированные на другом сервере, сериализуются в одном потоке репликации. Даже это преимущество может быть компенсировано задержками сети. |
|
|
A.14.6. |
Как я могу использовать репликацию для повышения производительности моей системы? |
Настройте один сервер в качестве источника и направьте на него все записи. Затем настройте столько реплик, сколько у вас есть бюджет и дисковое пространство, и распределите чтения между источником и репликами. Вы также можете запустить реплики с опцией |
|
|
A.14.7. |
Что следует сделать для подготовки клиентского кода в моих собственных приложениях для использования репликации, повышающей производительность? |
См. руководство по использованию репликации в качестве решения для горизонтального масштабирования, Раздел 16.3.4, «Использование репликации для горизонтального масштабирования». |
|
|
A.14.8. |
Когда и насколько репликация MySQL может улучшить производительность моей системы? |
|
Репликация MySQL наиболее полезна для системы, которая обрабатывает частые чтения и редкие записи. Теоретически, используя конфигурацию с одним источником и несколькими репликами, вы можете масштабировать систему, добавляя больше реплик, пока не исчерпаете пропускную способность сети или нагрузка обновлений не достигнет уровня, когда источник не сможет её обработать. Чтобы определить, сколько реплик можно использовать, прежде чем дополнительные преимущества начнут снижаться, и насколько можно улучшить производительность сайта, необходимо знать шаблоны запросов и эмпирически определить взаимосвязь между пропускной способностью чтений и записей на типичном источнике и типичной реплике путем тестирования. Приведенный здесь пример представляет собой довольно упрощенное вычисление того, что можно получить с помощью репликации для гипотетической системы. Пусть Предположим, что нагрузка системы состоит из 10% записей и 90% чтений, и мы определили путем тестирования, что
9 *
Последнее уравнение указывает максимальное количество записей для Этот анализ приводит к следующим выводам:
Эти вычисления предполагают бесконечную пропускную способность сети и игнорируют несколько других факторов, которые могут быть существенными в вашей системе. В многих случаях вы можете не сможете выполнить вычисление, подобное только что представленному, которое точно предскажет, что произойдет в вашей системе, если вы добавите
|
|
|
A.14.9. |
Как я могу использовать репликацию для обеспечения избыточности или высокой доступности? |
|
Способ реализации избыточности полностью зависит от вашего приложения и обстоятельств. Решения высокой доступности (с автоматическим переключением) требуют активного мониторинга и либо пользовательских скриптов, либо сторонних инструментов для обеспечения переключения с первоначального сервера MySQL на реплику. Для ручного управления процессом вы должны иметь возможность переключаться с отказавшего источника на предварительно настроенную реплику, изменив ваше приложение для взаимодействия с новым сервером или изменив DNS для сервера MySQL с отказавшего сервера на новый. Для получения дополнительной информации и примеров решений см. Раздел 16.3.7, «Переключение источников при аварийном переключении». |
|
|
A.14.10. |
Как я могу определить, использует ли сервер-источник репликации формат двоичного протоколирования на основе операторов или на основе строк? |
|
Проверьте значение системной переменной mysql> Показанное значение всегда является одним из |
|
|
A.14.11. |
Как я могу сказать реплике использовать репликацию на основе строк? |
Реплики автоматически знают, какой формат использовать. |
|
|
A.14.12. |
Как предотвратить репликацию операторов |
Запустите сервер с опцией |
|
|
A.14.13. |
Работает ли репликация на системах с разными операционными системами (например, источник работает на Linux, а реплики — на macOS и Windows)? |
Да. |
|
|
A.14.14. |
Работает ли репликация на оборудовании с разными архитектурами (например, источник работает на 64-битном компьютере, а реплики — на 32-битных)? |
Да. |
© 2025 Oracle
Licensed under the GPLv2 License.