A.14 MySQL 9.2 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-источник 1, и тем временем, прежде чем оно распространится на co-источник 2, клиент B может внести обновление в co-источник 2, которое заставит обновление клиента A работать иначе, чем на co-источнике 1. Таким образом, когда обновление клиента A дойдет до co-источника 2, оно создаст таблицы, которые отличаются от того, что у вас есть на co-источнике 1, даже после того, как все обновления из co-источника 2 также распространились. Это означает, что не следует связывать два сервера вместе в двунаправленном отношении репликации, если вы не уверены, что ваши обновления могут безопасно происходить в любом порядке, или если вы каким-либо образом не обрабатываете неправильно упорядоченные обновления в клиентском коде. Следует также понимать, что двунаправленная репликация на самом деле не сильно (если вообще) повышает производительность, что касается обновлений. Каждый сервер должен выполнять такое же количество обновлений, как если бы у вас был один сервер. Единственное отличие состоит в том, что немного меньше конфликтов блокировки, потому что обновления, поступающие с другого сервера, сериализуются в одном потоке репликации. Даже это преимущество может быть компенсировано задержками сети. |
|
|
A.14.6. |
Как я могу использовать репликацию для повышения производительности моей системы? |
Настройте один сервер в качестве источника и направьте все записи на него. Затем настройте столько реплик, сколько у вас есть бюджет и места в стойках, и распределите чтения между источником и репликами. Вы также можете запустить реплики с параметром , включить системную переменную |
|
|
A.14.7. |
Что мне следует сделать, чтобы подготовить клиентский код в моих собственных приложениях для использования репликации, повышающей производительность? |
См. руководство по использованию репликации в качестве решения для горизонтального масштабирования, Раздел 19.4.5, «Использование репликации для горизонтального масштабирования». |
|
|
A.14.8. |
Когда и насколько репликация MySQL может улучшить производительность моей системы? |
|
Репликация MySQL наиболее полезна для системы, которая обрабатывает частые чтения и редкие записи. Теоретически, используя настройку с одним источником и несколькими репликами, можно масштабировать систему, добавляя больше реплик, пока не исчерпается пропускная способность сети или нагрузка обновлений не станет такой большой, что источник не сможет её обработать. Чтобы определить, сколько реплик можно использовать, прежде чем дополнительные преимущества начнут снижаться, и насколько можно улучшить производительность сайта, необходимо знать ваши шаблоны запросов и эмпирически определить взаимосвязь между пропускной способностью чтения и записи на типичном источнике и типичной реплике путём тестирования. Приведённый здесь пример показывает довольно упрощённый расчёт того, что можно получить с репликацией для гипотетической системы. Пусть Допустим, нагрузка системы состоит из 10% записей и 90% чтений, и мы определили путём тестирования, что 9 * Последнее уравнение указывает максимальное количество записей для Этот анализ приводит к следующим выводам:
Эти вычисления предполагают бесконечную пропускную способность сети и игнорируют несколько других факторов, которые могут быть существенными для вашей системы. Во многих случаях вы не сможете выполнить вычисление, подобное тому, которое только что было показано, чтобы точно предсказать, что произойдёт в вашей системе, если вы добавите
|
|
|
A.14.9. |
Как я могу использовать репликацию для обеспечения избыточности или высокой доступности? |
|
Способ реализации избыточности полностью зависит от вашего приложения и обстоятельств. Решения высокой доступности (с автоматическим переключением) требуют активного мониторинга и либо пользовательских скриптов, либо инструментов сторонних разработчиков для обеспечения поддержки переключения от исходного сервера MySQL к реплике. Для ручного управления процессом вы должны иметь возможность переключаться с отказавшего источника на предварительно настроенную реплику, изменив ваше приложение для работы с новым сервером или скорректировав DNS для сервера MySQL с отказавшего сервера на новый сервер. Для получения дополнительной информации и некоторых примеров решений см. Раздел 19.4.8, «Переключение источников во время отказа». |
|
|
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.