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

Прописываем в секцию [mysqld] файла конфигурации сервера MySQL (например, /etc/my.cnf), следующие опции:

server_id = 1
log_bin = /var/lib/mysql/mysql-bin
log_bin_index = /var/lib/mysql/mysql-bin.index
binlog_format = ROW
binlog_do_db = db
binlog_expire_logs_seconds = 86400

Назначение опций:

  • server_id - идентификатор сервера,
  • log_bin - префикс имён файлов журналов репликации, к которому через точку будут добавляться порядковые номера частей,
  • log_bin_index - имя файла индекса журналов репликации, в котором будут отмечены все имеющиеся файлы журналов репликации,
  • binlog_format - формат журнала: STATEMENT - в журнал пишутся SQL-запросы, ROW - в журнал пишутся изменения строк, MIXED - смешанный режим, в котором предпочтение отдаётся SQL-запросам, если они не содержат функций RANDOM(), NOW() и т.п.,
  • binlog_row_image - режим записи строк в формате ROW: FULL - в журнал записываются значния всех колонок (по умолчанию), MINIMAL - записываются только идентификатор записи и значения изменённых колонок, NOBLOB - записываются значения всех колонок, кроме неизменных колонок типа BLOB и TEXT,
  • binlog_do_db - база данных, изменения которой нужно записывать в журнал репликации. В случае нескольких баз данных опция указывается несколько раз,
  • binlog_ignore_db - база данных, изменения которой не нужно записывать в журнал репликации. Для игнорирования нескольких баз данных опция указывается несколько раз. Эта опция игнорируется, если список отслеживаемых баз данных явным образом указан с помощью опций binlog_do_db,
  • binlog_expire_logs_seconds - аналог устаревшей опции expire_logs_days, указывает, сколько секунд хранить журналы репликации. Файлы старше будут автоматически удаляться,
  • binlog_rows_query_log_events - булева опция, предписывающая записывать в журнал репликации оригинальный SQL-запрос (по умолчанию отключена),
  • gtid_mode - булевое занчение, указывающее, нужно ли добавлять в записи журнала транзакций GTID - Global Transaction IDentifier, то есть - глобальный идентификатор транзакции (по умолчанию выключено),
  • enforce_gtid_consistency - булевое значение, при включении которого в журнал транзакций не будут попадать операции, не безопасные с точки зрения транзакционной целостности (по умолчанию включено).

После редактирования файла конфигурации перезапускаем сервер:

# systemctl restart mysql

Создаём пользователя, от имени которого подчинённый сервер будет осуществлять доступ к журналам репликации:

GRANT REPLICATION SLAVE ON *.* TO slave@host IDENTIFIED BY 'password';

В случае с MySQL версии 8.0 команды немного отличаются:

CREATE USER slave@host IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO slave@host;

И применяем изменения:

FLUSH PRIVILEGES;

После этого можно посмотреть текущее состояние мастера с помощью следующей команды:

SHOW MASTER STATAUS\G

Досрочное удаление журналов репликации

Для удаления всех файлов журналов репликации, которым больше 1 часа, можно воспользоваться следующим запросом:

PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 1 HOUR);

Источники