Настройка источника репликации в 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);