Як настроїти MySQL Master/Slave реплікацію?

Як настроїти MySQL Master/Slave реплікацію?

Колеги всім привіт.

У сьогоднішній статті я вам розповідатиму про таку річ у Mysql як реплікація на основі положення двійкового файлу журналу. Цей варіант вважається найпростішим у виконанні, але не менш афективним. Сам процес реплікації в Mysql дозволяє копіювати дані з одного сервера бази даних на інший, такі сервера прийнято називати master slave. Реплікація за замовчуванням асинхронна.

Версію бази даних я використовуватиму: 8.0.29

Сервера я використовуватиму для демонстрації:

192.168.2.229 mysql1.local - MASTER
192.168.2.230 mysql2.local - SLAVE

 

Налаштування 192.168.2.229 mysql1.local та 192.168.2.230 mysql2.local будуть абсолютно однакові так як у вас будуть випадки коли вам потрібно буде перемикати реплікацію в зворотний бік, і щоб потім відразу все зробити однаковим.

 

Вміст статті:

  1. Налаштування master сервера.
  2. Створення облікового запису на master-сервері.
  3. Налаштування сервера slave.
  4. Резервна копія master сервера.
  5. Пошук позиції двійкового журналу на master-сервері.
  6. Підключаємо slave сервер до master сервера.
  7. Запуск реплікації.
  8. Перевірка реплікації.
  9. Підсумки.

 

1. Налаштування master сервера.

Починатимемо з налаштування конфігураційного файлу бази даних. За замовчуванням він знаходиться /etc/my.cnf.

$. vim /etc/my.cnf

 

1.1. Насамперед нам потрібно налаштувати server_id. server_id це ідентифікатор сервера і він використовується для ідентифікації сервера в топології реплікації і він обов'язково має бути позитивним цілим числом від 1 до 32.

[mysqld]
server_id = 10

 

1.2. Налаштування ведення двійкового журналу (binary log).

Ведення двійкового журналу на сервері master є обов'язковою дією тому що сервер slave буде підключатися на сервер master і читати ці двійкові журнали. Ведення двійкового журналу за замовчуванням увімкнено. Але за замовчуванням всі двійкові журнали будуть створюватися і зберігається в директорії там, де лежать всі файли бази даних. Нам це не підходить і ми самі вкажемо місце збереження двійкових журналів.

[mysqld]
log_bin = /app/mysql/binary_log/mysql-bin.log
log_bin_index = /app/mysql/binary_log/binlog.index

 

1.3. Налаштування узгодженості реплікації.

За узгодженість реплікації відповідає змінна innodb_flush_log_at_trx_commit та sync_binlog. Завжди ставте значення цих змінних у значення 1. Ця змінна може мати значення 0, 1, 2. Якщо ви вкажете 0 або 2, то є ризик втратити транзакції.

[mysqld]
innodb_flush_log_at_trx_commit = 1
sync_binlog=1

 

1.4. Налаштування на репліці ведення двійкового журналу.

Ведення двійкового журналу на сервері slave є не обов'язковим, ну оскільки в певний момент ви захочете переключити реплікацію у зворотний бік, то краще slave сервер теж вів свій двійковий журнал.

[mysqld]
log_replica_updates = ON

 

1.5. Налаштування ведення журналу ретрансляції.

За ведення журналу ретрансляції відповідають змінні relay_log та relay_log_index. Ці змінні відносяться до сервера slave, і вони за замовчуванням включені, але вони будуть створюватися в директорії, де у вас лежать всі файли бази даних, і нам це не підходить. Ми створимо свої директорії.

[mysqld]
relay_log = /app/mysql/relay_log/mysql-relay.log
relay_log_index = /app/mysql/relay_log/mysql-relay.index

 

1.6. Результат.

У підсумку у вас у конфігураційному файлі має бути як у мене. Це сервер master 192.168.2.229 mysql1.local

[mysqld]
server_id = 10
log_bin = /app/mysql/binary_log/mysql-bin.log
log_bin_index = /app/mysql/binary_log/binlog.index
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
log_replica_updates = ON
relay_log = /app/mysql/relay_log/mysql-relay.log
relay_log_index = /app/mysql/relay_log/mysql-relay.index

mysql_replication


 

2. Створення облікового запису на master-сервері.

Кожен slave сервер буде підключатися до master сервера з використанням імені користувача та пароля, тому на master сервері повинна бути обліковий запис користувача, який slave сервер використовуватиме для підключення.

 

2.1. Створюємо обліковий запис на master-сервері.

mysql> CREATE USER 'replication'@'%' IDENTIFIED BY 'kjs&#&d89h3G';

 

2.2. Призначаємо цього користувача необхідні права.

mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';


 

3. Налаштування slave сервера.

У конфігураційний файл slave сервера ми повинні додати все, що ми додавали на master сервер, але за винятком server_id. server_id повинен бути унікальним на кожному сервері в тій топології реплікації, де він бере участь. Ну і додамо параметр read_only, щоб не було можливості робити операції вставки, редагування та видалення даних, а тільки їх читання.

[mysqld]
server_id = 11
log_bin = /app/mysql/binary_log/mysql-bin.log
log_bin_index = /app/mysql/binary_log/binlog.index
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1
log_replica_updates = ON
relay_log = /app/mysql/relay_log/mysql-relay.log
relay_log_index = /app/mysql/relay_log/mysql-relay.index
read_only = ON

 

На master сервері server_id у нас 10, а slave сервер буде 11.


 

4. Резервна копія master сервера.

4.1. Настала черга створити резервну копію бази даних master сервера і перенести цю копію на slave сервер. Зробити резервну копію є безліч варіантів, але ми будемо використовувати найпростіший утиліта mysqldump.

$. mysqldump -u root -p --all-databases --source-data > /app/backup/backup.db

 

4.2. Після того як ми зробили резервну копію бази даних, нам потрібно перенести її на slave сервер.

$. scp /app/backup/backup.db  root@192.168.2.230:/app/backup/

mysql_replication

 

4.3. На сервері slave тепер нам потрібно цю резервну копію імпортувати.

$. mysql -u root -p < /app/backup/backup.db


 

5. Пошук позиції двійкового журналу на master сервері.

На master сервері нам потрібно знайти останню позицію в двійковому журналі, та й сам журнал як називається на поточний момент.

mysql> SHOW MASTER STATUS;

mysql_replication

У цьому результаті нам важливо записати значення File та Position.


 

6. Підключаємо slave сервер до master сервера.

Тепер після того що ми зробили вище нам залишилося вказати slave серверу як підключаться до master серверу.

mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.2.229', SOURCE_USER='replication', SOURCE_PASSWORD= d89h3G', SOURCE_LOG_FILE='mysql-bin.000004', SOURCE_LOG_POS=871;

mysql_replication

Успіх! Залишилось запустити реплікацію.


 

7. Запуск реплікації.

За включення та зупинення реплікації в базі даних існують команди START REPLICA та STOP REPLICA. Нам потрібно виконати START REPLICA.

mysql> START REPLICA;


 

8. Перевірка реплікації.

Після запуску реплікації нам потрібно перевірити, чи все правильно працює. Для перевірки на сервері slave скористаємося командою:

mysql> SHOW REPLICA STATUS\G;

mysql_replication

Найважливіші параметри, які показують, що реплікація проходить успішно це:

Replica_IO_Running: Yes
Replica_SQL_Running: Yes


 

9. Підсумки.

У підсумки колеги ми сьогодні розібрали як настроїти найпростішу реалізацію реплікації master slave на основі позицій двійкового журналу. У більшості випадків такого варіанту реалізації буде достатньо, але якщо у вас дуже навантажена база даних, то потрібно використовувати додаткові можливості реплікації.

Поступово в наступних статтях ми розбиратимемо складніші реалізації реплікації, включаючи таке поняття як GTID і так далі.

СХОЖІ СТАТТІ

MySQL - Генерація тестових даних
MySQL - Генерація тестових даних
MYSQL
Читати далі
MySQL / MariaDB Як отримати id останнього вставленого запису в таблиці - LAST_INSERT_ID
MySQL / MariaDB Як отримати id останнього вставленого запису в таблиці - LAST_INSERT_ID
MYSQL
Читати далі
MySQL / MariaDB Як перетворити регістр символів - Функції UPPER та LOWER
MySQL / MariaDB Як перетворити регістр символів - Функції UPPER та LOWER
MYSQL
Читати далі