Назад в блог

Настройка репликации в MySQL на Ubuntu

Настройка репликации в MySQL на Ubuntu

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

В этом руководстве мы рассмотрим шаги по настройке экземпляра MySQL на одном сервере в качестве базы данных-источника, а затем по настройке экземпляра MySQL на другом сервере для работы в качестве его реплики.

Предварительные требования

В этом руководстве будет продемонстрирован очень простой пример репликации MySQL. В нем участвуют один источник и одна реплика базы данных. База данных-источник является основной копией базы данных, в то время как база данных-реплика будет репликой базы данных-источника. Для нашей демонстрации настроены два сервера со следующими IP-адресами:

  • Сервер-источник: 31.171.240.179
  • Сервер-реплика: 31.171.250.139

Каждый сервер настроен с последней версией конфигурации Ubuntu 20.04 server. Сначала выполните шаги руководства, в котором показано, как настроить сервер Ubuntu. Обратите внимание, что баз данных-реплик может быть больше. В этом руководстве предполагается, что у вас уже установлен и настроен MySQL. Нужна помощь с установкой MySQL? В этом руководстве подробно описаны шаги по установке и базовому использованию MySQL.

Если вкратце, вот пакеты, которые вам понадобятся:

Брандмауэры на обеих системах должны быть настроены так, чтобы разрешать трафик из обеих систем на порт 3306. Это порт по умолчанию для MySQL. Вы можете узнать больше об основах UFW с демонстрацией из нашей статьи в блоге.

Настройка базы данных-источника

  • Тонкая настройка конфигурации MySQL

MySQL использует my.cnf в качестве основного конфигурационного файла. Мы обновим my.cnf, чтобы назначить сервер в качестве источника. Сначала откройте конфигурационный файл с помощью текстового редактора:

Затем добавьте следующие строки в раздел mysqld:

Replication in MySQL 4

Что означают эти строки?

  • bind-address: это запись, которая определяет связь между службой и IP-адресом. По умолчанию значение может быть 127.0.0.1 (localhost). Новым значением будет IP-адрес сервера.
  • server-id: в репликации MySQL каждый сервер должен иметь уникальный идентификатор сервера (server ID). Это может быть любое число. Для простоты оно установлено в 1.
  • log_bin: здесь хранятся фактические сведения о репликации. База данных-реплика будет копировать все, что зарегистрировано в журнале.
  • binlog_do_db: эта запись указывает базу данных, которая будет объектом репликации на сервере-реплике. Баз данных может быть несколько. В данном случае примером базы данных является newdatabase.

После внесения изменений сохраните конфигурационный файл. Чтобы загрузить изменения в my.cnf:

  • Предоставление разрешений пользователю реплики

Следующий шаг — создание пользователя реплики и предоставление соответствующих привилегий. Это необходимо сделать из оболочки MySQL. Сначала запустите оболочку MySQL:

Затем создайте выделенного пользователя для базы данных-реплики. Измените имя пользователя и пароль соответствующим образом:

Теперь предоставьте пользователю соответствующие привилегии:

Вы можете узнать больше о пользователях и правах доступа в MySQL из нашей статьи в блоге. Затем перезагрузите таблицу привилегий, чтобы изменения вступили в силу:

FLUSH PRIVILEGES

  • Настройка базы данных

Нам нужна копия исходной базы данных на реплике. Структуру можно создать вручную. Однако в большинстве случаев это довольно неудобно. Вот почему прямой экспорт базы данных является наиболее оптимальным решением. В этом примере исходная база данных — это newdatabase. Измените текущую базу данных:

Следующая команда заблокирует базу данных, предотвращая любые новые изменения:

Затем проверьте статус базы данных:

Replication in MySQL 3

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

Задача выполнена. Далее разблокируйте базу данных:

Наконец, выйдите из оболочки:

Настройка реплики

Теперь пришло время настроить базу данных реплики.

  • Импорт исходной базы данных

Нам нужна копия исходной базы данных на сервере реплики. Для этого мы будем использовать экспортированный ранее SQL-файл. Запустите оболочку MySQL:

После этого создайте пустую базу данных с тем же именем:

Затем выйдите из оболочки:

Теперь импортируйте SQL-файл в базу данных:

sudo mysql -u

  • Настройка конфигурации MySQL

В конфигурационном файле MySQL необходимо объявить несколько параметров. Откройте конфигурационный файл в текстовом редакторе:

Следующие записи должны находиться в разделе mysqld. В противном случае это не сработает. Первый параметр — это ID сервера. Как упоминалось ранее, он должен быть уникальным для всех серверов в конфигурации репликации «источник-реплика». Для демонстрации он установлен в 2:

Затем добавьте следующие строки:

Replication in MySQL 2

Здесь только relay-log является новой записью. Это журнал, который сервер реплики создает во время репликации. Формат журнала такой же, как и у бинарного журнала. Сохраните конфигурационный файл и перезапустите MySQL:

  • Включение репликации

Наконец, мы готовы включить репликацию из MySQL. Запустите оболочку MySQL:

Выполните следующую команду. Сначала измените соответствующим образом IP-адрес, имя пользователя и пароли:

CHANGE MASTER TO MASTER_HOST

Команда выполняет следующее:

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

Наконец, активируйте сервер реплики:

START REPLICA

  • Разное

Нужно проверить подробности текущего состояния реплики? Выполните следующую команду в оболочке MySQL. Символ \G в конце служит для перегруппировки текста, чтобы сделать его более читаемым:

Replication in MySQL 1

Если возникла проблема с подключением, попробуйте запустить сервер реплики, чтобы пропустить ее:

Заключение

Репликация MySQL имеет множество нюансов. Это лишь краткая демонстрация ее базовой формы. Однако ее можно легко расширить до конфигураций с несколькими источниками и репликами. Те же шаги будут применимы и к любым сложным конфигурациям более высокого уровня. Всегда полезно протестировать конфигурацию после настройки. Попробуйте выполнить несколько команд insertdelete или update в базе данных источника. Если все настроено правильно, база данных реплики должна корректно применить все изменения.

Кроме того, вы можете ознакомиться с другими материалами в нашем блоге, посвященными возможностям MySQL:

Приятной работы!

 

author

Hark Labs

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.