You are here

Настройка Master-Slave Replication на MariaDB (MySQL). Начало.

настроим кластер Master - Slave  MariaDB (репликация в одном направлении)

Уважаемые читатели, в этих статьях мы настроим кластер Master - Slave (репликация в одном направлении) на примере MariaDB (форк MySQL). Использовать будем два сервера с Debian Linux.

В данной статье разберем:

  • Установка MariaDB на Debian.
  • Особенности конфигурационного файла MariaDB
  • Разбираем значения конфигурационного файла 50-server.cnf
  • Пример создания тестовой базы, для проверки Репликации
  • Заполняем конфигурационный файл MariaDB нашими данными
  • Создаем пользователя для работы с Replication

1. Установка MariaDB на Debian

Обновляем индекс пакетов для Debian:

  1. sudo apt update

Устанавливаем пакет MariaDB server + client. Некоторые источники пропускают установку client, и это приводит к невозможности работы в самой базе. Если не поставить MariaDB-client, вы не сможете работать с базой. Поэтому ставим оба пакета:

  1. sudo apt install mariadb-server mariadb-client

В MariaDB необходимо настроить начальную безопасность через "Secure MariaDB server". После запуска команды "secure" будет серия подсказок:

  • Первый запрос попросит вас указать текущий пароль root для базы данных (не путать с root системы). Так как мы ставим базу первый раз, пароля у нас нет, можно просто нажать «Enter».
  • Второй запрос будет: хотите ли вы установить пароль на администратора базы данных. Я указал "N". Официальный портал просит не указывать пароль на root базы данных, так как это может привести к поломке самой базы при последующих обновлениях. Аутентификация проходит с использованием socket.
  • По остальным вопросам указываем "Y", соглашаемся на действия по умолчанию.
  1. sudo mysql_secure_installation
  2.  
  3. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
  4. SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
  5.  
  6. In order to log into MariaDB to secure it, well need the current
  7. password for the root user. If youve just installed MariaDB, and
  8. you havent set the root password yet, the password will be blank,
  9. so you should just press enter here.
  10.  
  11. Enter current password for root (enter for none):
  12. OK, successfully used password, moving on...
  13.  
  14. Setting the root password ensures that nobody can log into the MariaDB
  15. root user without the proper authorisation.
  16.  
  17. Set root password? [Y/n]
  18. ...
  19. # Я указал N по этому вопросe. По остальным Y
  20. ...

Пункт выше отличается от простой установки MySQL, в том числе и последующая авторизация в базе данных. Тем не менее MariaDB является продолжением MySQL (MariaDB – это форк проекта MySQL, разработанный и поддерживаемый создателями MySQL), а соответственно и общие принципы остаются теми же, по вопросу создания Репликации.

Чтобы зайти в базу данных, нужно иметь права root:

  1. # Попытка зайти без прав root
  2. $ mysql
  3. ERROR 1045 (28000): Access denied for user 'debuser'@'localhost' (using password: NO)
  4. # Попытка зайти без прав root
  5. $ mariadb
  6. ERROR 1045 (28000): Access denied for user 'debuser'@'localhost' (using password: NO)
  7. # Попытка зайти с правами root, работают варианты mysql и mariadb
  8. $ sudo mariadb
  9. Welcome to the MariaDB monitor. Commands end with ; or \g.
  10. Your MariaDB connection id is 41
  11. Server version: 10.3.17-MariaDB-0+deb10u1-log Debian 10
  12.  
  13. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  14.  
  15. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  16.  
  17. MariaDB [(none)]>

При этом система вас не просит указывать пароль под root, даже если ранее вы установили пароль через пакет "secure". С правами root, вы можете использовать для входа в базу все три комбинации "mysql", "mariadb", "mysql -u root -p". Новая система предполагает: что вы заходите только с правами root, а данная учетная запись уже защищена, поэтому он не просит пароль при входе в MariaDB.

Проверяем статус базы данных MariaDB:

  1. $ sudo systemctl status mariadb
  2. ● mariadb.service - MariaDB 10.3.17 database server
  3. Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
  4. Active: active (running) since Fri 2019-10-04 13:03:59 +05; 2h 37min ago
  5. Docs: man:mysqld(8)
  6. ...
  7. окт 04 13:03:59 debsv systemd[1]: Started MariaDB 10.3.17 database server.

На второй сервер ставим точно такую же версию MariaDB, если не хотите получить потом сюрприз, в виде несовместимости.

Для входа из под обычного пользователя с правами root, используем:

  1. sudo mysql

выход из базы:

  1. > exit;

2. Особенности конфигурационного файла MariaDB

Репликация «Master-Slave» - это тип репликации, при котором данные реплицируются только в одностороннем порядке. Сервер, реплицирующий данные с другого сервера, называется Slave (подчиненным), основной - Master. Изменения данных происходят на основном сервере, а подчиненный сервер автоматически реплицирует изменения с главного сервера. Особенность: вы можете изменить данные на подчиненном сервере, но изменения не будут реплицированы на главный сервер.

Репликация MariaDB основана на двоичном журнале (binlog). Цель двоичного журнала состоит в том, чтобы:

  • разрешить репликацию
  • резервное копирование
  • восстановление баз данных

Для работы репликации необходимо включить двоичную регистрацию на главном сервере.

Конфигурационный файл. На данном этапе надо быть внимательным с файлом, в который прописываем параметры и значение полей, под которыми прописываем эти параметры. Многие источники по настройке репликации «Master-Slave» не делают на это акцент, а вы потом теряете уйму времени на исправление ошибок. Ниже представлен шаблонный фрагмент, который нам нужно прописать в файле "*.cnf":

  1. log-bin = /var/log/mysql/master-bin
  2. log-bin-index = /var/log/mysql/master-bin.index
  3. binlog_format = mixed
  4. server-id = 01
  5. replicate-do-db = database_name

Особенности файла конфигурации. По логике, нам надо зайти в файл "my.cnf", указанный ниже и внести наши параметры. Но пока НЕ спешим этого делать:

  1. sudo nano /etc/mysql/my.cnf

Допустим мы внесли в этот файл нужные нам строки, сохранили его и перезагрузили MariaDB:

  1. sudo systemctl restart mariadb

При попытке зайти в базу MariaDB мы получим отказ:

  1. sudo mariadb
  2. mariadb: unknown variable 'log-bin=/var/log/mysql/master-bin'

И эта ошибка валится на любые правки. Все дело в том, что есть две особенности MariaDB:

  • Файл конфигурации ".cnf" в MariaDB должен содержать строчку [mysqld], после которой мы прописываем наш шаблон.
  • Файл ".cnf" в MariaDB находиться по другому пути: /etc/mysql/mariadb.conf.d/50-server.cnf

3. Разбираем значения конфигурационного файла 50-server.cnf

Рассмотрим основные значениям конфигурационного файла 50-server.cnf, которые нам надо указать после поля [mysqld] (без этого поля, работать не будет!):

bind-address - тут указываем IP адреса наших серверов Master-Slave.

В нашем случае IP адреса Master и Slave равны соответственно:

  • 192.168.0.5 (Master)
  • 192.168.0.6 (Slave)

* Если вы не знаете какие у вас IP серверов: выполните на них команду "ip a" (в Debian) и посмотрите свой IP в интерфейсе "enp..." (сетевая карта) или "wlp..." (беспроводная сетевая карта). Строка "inet ...".

log-bin и log-bin-index
Двоичный журнал состоит из файлов журнала и файла индекса:

  1. log-bin = /var/log/mysql/master-bin
  2. log-bin-index = /var/log/mysql/master-bin.index
  • Первая строка: включает двоичное ведение журнала. master-bin - базовое имя двоичного журнала.
  • Вторая строка: дает имя двоичного файла индекса журнала.

binlog_format - указывает формат двоичных журналов.
server-id - используется для отличия серверов друг от друга.
replicate-do-db - указываем имя базы данных для реплицирования. Можно указать несколько баз.

* Если вы не знаете какие у вас базы, заходим в MariaDB вводим команду "show databases":

  1. sudo mariadb
  2. Welcome to the MariaDB monitor. Commands end with ; or \g.
  3. Your MariaDB connection id is 38
  4. Server version: 10.3.17-MariaDB-0+deb10u1-log Debian 10
  5.  
  6. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  7.  
  8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  9.  
  10. MariaDB [(none)]> show databases;
  11. +--------------------+
  12. | Database |
  13. +--------------------+
  14. | mariamaster |
  15. | wordpress |
  16. +--------------------+
  17. 2 rows in set (0.040 sec)

У нас две базы: условно рабочая "wordpress" и для тестов "mariamaster". У вас будет другое количество и другие названия.

Для чего нам тестовая база данных "mariamaster": чтобы проверить работает репликация или нет. На рабочей базе экспериментировать не стоит. Логика простая. Поэтому создаем базу "mariamaster", вносим в нее таблицу с некоторыми данными. После того как настроим репликацию, на главном сервере добавим данные в таблицу и проверим, появились ли эти данные на Slave.

4. Пример создания тестовой базы, для проверки Репликации

* Если вы хорошо знаете как работать с базами, можете пропустить этот пункт, но именно на этой базе в конце статей мы будем экспериментировать с работой репликации.

Пример создания тестовой базы "mariamaster":

Заходим в базу MariaDB на головном сервере Master:

  1. sudo mariadb

Создаем новую базу и переходим в эту базу:

  1. > CREATE DATABASE mariamaster;
  2. > USE mariamaster;

Добавляем таблицу:

  1. CREATE TABLE IF NOT EXISTS equipment (
  2. equip_id int(5) NOT NULL AUTO_INCREMENT,
  3. type varchar(50) DEFAULT NULL,
  4. install_date DATE DEFAULT NULL,
  5. color varchar(20) DEFAULT NULL,
  6. working bool DEFAULT NULL,
  7. location varchar(250) DEFAULT NULL,
  8. PRIMARY KEY(equip_id)
  9. );
  10. Query OK, 0 rows affected (0.03 sec)

Добавляем данные в таблицу:

  1. INSERT INTO equipment (type, install_date, color, working, location)
  2. VALUES
  3. ("Slide", Now(), "blue", 1, "Southwest Corner");

Проверяем что получилось:

  1. > SELECT * FROM equipment;
  2. +----------+-------+--------------+-------+---------+------------------+
  3. | equip_id | type | install_date | color | working | location |
  4. +----------+-------+--------------+-------+---------+------------------+
  5. | 1 | Slide | 2019-10-02 | blue | 1 | Southwest Corner |
  6. +----------+-------+--------------+-------+---------+------------------+
  7. 1 rows in set (0.000 sec)

Все. Пока оставляем тестовую базу и выходим из MariaDB. Данный пример с добавлением тестовой базы взят из интернета, можете внести свою базу. Так как это не суть данной статьи. Для чего? Чтобы после настройки репликации внести на главном сервере данные в эту таблицу и проверить их отражение на втором сервере. Вы можете создать свою базу со своими таблицами, если у вас хороший опыт работы с базами.

5. Заполняем конфигурационный файл MariaDB нашими данными

После уточнения всех моментов, приступим к заполнению файла "*.cnf" MariaDB:

  1. sudo nano <strong>/etc/mysql/mariadb.conf.d/50-server.cnf

Заполняем нашими данными и получаем примерно такой результат (фрагмент из файла 50-server.cnf):

  1. # * Logging and Replication
  2. #
  3. ...
  4. #binlog_ignore_db = exclude_database_name
  5.  
  6. [mysqld]
  7. log-bin = /var/log/mysql/master-bin
  8. log-bin-index = /var/log/mysql/master-bin.index
  9. binlog_format = mixed
  10. server-id = 01
  11. replicate-do-db = wordpress
  12. replicate-do-db = mariamaster
  13. bind-address = 192.168.0.5
  14. ...

В этом же файле выше есть строчка, которые надо закомментировать:

  1. # bind-address = 127.0.0.1

Сохраняем файл и перезапускаем MariaDB

  1. sudo systemctl restart mariadb
  2. или
  3. sudo systemctl restart mysql

6. Создаем пользователя для работы с Replication

Нам нужно добавить пользователя репликации на главный сервер, которого будет использовать удаленный сервер Slave. Для удаленного входа на главный сервер и запроса двоичных журналов. Шаблон выглядит так:

  1. create user 'replicant'@'%' identified by 'replicant_password';

Особо менять ничего не будем, для простоты пояснения пароль сделаем как и пользователя (крайне не рекомендуем делать подобное на боевом сервере):

  1. create user 'replicant'@'%' identified by 'replicant';

Дальше назначаем привилегии:

  1. grant replication slave on *.* to replicant;

Делаем сброс таблицы привилегий:

  1. flush privileges;

Продолжение рассмотрим во второй статье. Ссылка на статью: Настройка Master-Slave Replication на MariaDB (MySQL). Проверка и тестирование.

Источник: http://linuxsql.ru