Уважаемые читатели, в этих статьях мы настроим кластер Master - Slave (репликация в одном направлении) на примере MariaDB (форк MySQL). Использовать будем два сервера с Debian Linux.
В данной статье разберем:
1. Установка MariaDB на Debian
Обновляем индекс пакетов для Debian:
sudo apt update
Устанавливаем пакет MariaDB server + client. Некоторые источники пропускают установку client, и это приводит к невозможности работы в самой базе. Если не поставить MariaDB-client, вы не сможете работать с базой. Поэтому ставим оба пакета:
sudo apt install mariadb-server mariadb-client
В MariaDB необходимо настроить начальную безопасность через "Secure MariaDB server". После запуска команды "secure" будет серия подсказок:
sudo mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, well need the current password for the root user. If youve just installed MariaDB, and you havent set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] ... # Я указал N по этому вопросe. По остальным Y ...
Пункт выше отличается от простой установки MySQL, в том числе и последующая авторизация в базе данных. Тем не менее MariaDB является продолжением MySQL (MariaDB – это форк проекта MySQL, разработанный и поддерживаемый создателями MySQL), а соответственно и общие принципы остаются теми же, по вопросу создания Репликации.
Чтобы зайти в базу данных, нужно иметь права root:
# Попытка зайти без прав root $ mysql ERROR 1045 (28000): Access denied for user 'debuser'@'localhost' (using password: NO) # Попытка зайти без прав root $ mariadb ERROR 1045 (28000): Access denied for user 'debuser'@'localhost' (using password: NO) # Попытка зайти с правами root, работают варианты mysql и mariadb $ sudo mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.3.17-MariaDB-0+deb10u1-log Debian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
При этом система вас не просит указывать пароль под root, даже если ранее вы установили пароль через пакет "secure". С правами root, вы можете использовать для входа в базу все три комбинации "mysql", "mariadb", "mysql -u root -p". Новая система предполагает: что вы заходите только с правами root, а данная учетная запись уже защищена, поэтому он не просит пароль при входе в MariaDB.
Проверяем статус базы данных MariaDB:
$ sudo systemctl status mariadb ● mariadb.service - MariaDB 10.3.17 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-10-04 13:03:59 +05; 2h 37min ago Docs: man:mysqld(8) ... окт 04 13:03:59 debsv systemd[1]: Started MariaDB 10.3.17 database server.
На второй сервер ставим точно такую же версию MariaDB, если не хотите получить потом сюрприз, в виде несовместимости.
Для входа из под обычного пользователя с правами root, используем:
sudo mysql
выход из базы:
> exit;
2. Особенности конфигурационного файла MariaDB
Репликация «Master-Slave» - это тип репликации, при котором данные реплицируются только в одностороннем порядке. Сервер, реплицирующий данные с другого сервера, называется Slave (подчиненным), основной - Master. Изменения данных происходят на основном сервере, а подчиненный сервер автоматически реплицирует изменения с главного сервера. Особенность: вы можете изменить данные на подчиненном сервере, но изменения не будут реплицированы на главный сервер.
Репликация MariaDB основана на двоичном журнале (binlog). Цель двоичного журнала состоит в том, чтобы:
Для работы репликации необходимо включить двоичную регистрацию на главном сервере.
Конфигурационный файл. На данном этапе надо быть внимательным с файлом, в который прописываем параметры и значение полей, под которыми прописываем эти параметры. Многие источники по настройке репликации «Master-Slave» не делают на это акцент, а вы потом теряете уйму времени на исправление ошибок. Ниже представлен шаблонный фрагмент, который нам нужно прописать в файле "*.cnf":
log-bin = /var/log/mysql/master-bin log-bin-index = /var/log/mysql/master-bin.index binlog_format = mixed server-id = 01 replicate-do-db = database_name
Особенности файла конфигурации. По логике, нам надо зайти в файл "my.cnf", указанный ниже и внести наши параметры. Но пока НЕ спешим этого делать:
sudo nano /etc/mysql/my.cnf
Допустим мы внесли в этот файл нужные нам строки, сохранили его и перезагрузили MariaDB:
sudo systemctl restart mariadb
При попытке зайти в базу MariaDB мы получим отказ:
sudo mariadb mariadb: unknown variable 'log-bin=/var/log/mysql/master-bin'
И эта ошибка валится на любые правки. Все дело в том, что есть две особенности MariaDB:
3. Разбираем значения конфигурационного файла 50-server.cnf
Рассмотрим основные значениям конфигурационного файла 50-server.cnf, которые нам надо указать после поля [mysqld] (без этого поля, работать не будет!):
bind-address - тут указываем IP адреса наших серверов Master-Slave.
В нашем случае IP адреса Master и Slave равны соответственно:
* Если вы не знаете какие у вас IP серверов: выполните на них команду "ip a" (в Debian) и посмотрите свой IP в интерфейсе "enp..." (сетевая карта) или "wlp..." (беспроводная сетевая карта). Строка "inet ...".
log-bin и log-bin-index
Двоичный журнал состоит из файлов журнала и файла индекса:
log-bin = /var/log/mysql/master-bin log-bin-index = /var/log/mysql/master-bin.index
binlog_format - указывает формат двоичных журналов.
server-id - используется для отличия серверов друг от друга.
replicate-do-db - указываем имя базы данных для реплицирования. Можно указать несколько баз.
* Если вы не знаете какие у вас базы, заходим в MariaDB вводим команду "show databases":
sudo mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 38 Server version: 10.3.17-MariaDB-0+deb10u1-log Debian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | mariamaster | | wordpress | +--------------------+ 2 rows in set (0.040 sec)
У нас две базы: условно рабочая "wordpress" и для тестов "mariamaster". У вас будет другое количество и другие названия.
Для чего нам тестовая база данных "mariamaster": чтобы проверить работает репликация или нет. На рабочей базе экспериментировать не стоит. Логика простая. Поэтому создаем базу "mariamaster", вносим в нее таблицу с некоторыми данными. После того как настроим репликацию, на главном сервере добавим данные в таблицу и проверим, появились ли эти данные на Slave.
4. Пример создания тестовой базы, для проверки Репликации
* Если вы хорошо знаете как работать с базами, можете пропустить этот пункт, но именно на этой базе в конце статей мы будем экспериментировать с работой репликации.
Пример создания тестовой базы "mariamaster":
Заходим в базу MariaDB на головном сервере Master:
sudo mariadb
Создаем новую базу и переходим в эту базу:
> CREATE DATABASE mariamaster; > USE mariamaster;
Добавляем таблицу:
CREATE TABLE IF NOT EXISTS equipment ( equip_id int(5) NOT NULL AUTO_INCREMENT, type varchar(50) DEFAULT NULL, install_date DATE DEFAULT NULL, color varchar(20) DEFAULT NULL, working bool DEFAULT NULL, location varchar(250) DEFAULT NULL, PRIMARY KEY(equip_id) ); Query OK, 0 rows affected (0.03 sec)
Добавляем данные в таблицу:
INSERT INTO equipment (type, install_date, color, working, location) VALUES ("Slide", Now(), "blue", 1, "Southwest Corner");
Проверяем что получилось:
> SELECT * FROM equipment; +----------+-------+--------------+-------+---------+------------------+ | equip_id | type | install_date | color | working | location | +----------+-------+--------------+-------+---------+------------------+ | 1 | Slide | 2019-10-02 | blue | 1 | Southwest Corner | +----------+-------+--------------+-------+---------+------------------+ 1 rows in set (0.000 sec)
Все. Пока оставляем тестовую базу и выходим из MariaDB. Данный пример с добавлением тестовой базы взят из интернета, можете внести свою базу. Так как это не суть данной статьи. Для чего? Чтобы после настройки репликации внести на главном сервере данные в эту таблицу и проверить их отражение на втором сервере. Вы можете создать свою базу со своими таблицами, если у вас хороший опыт работы с базами.
5. Заполняем конфигурационный файл MariaDB нашими данными
После уточнения всех моментов, приступим к заполнению файла "*.cnf" MariaDB:
sudo nano <strong>/etc/mysql/mariadb.conf.d/50-server.cnf
Заполняем нашими данными и получаем примерно такой результат (фрагмент из файла 50-server.cnf):
# * Logging and Replication # ... #binlog_ignore_db = exclude_database_name [mysqld] log-bin = /var/log/mysql/master-bin log-bin-index = /var/log/mysql/master-bin.index binlog_format = mixed server-id = 01 replicate-do-db = wordpress replicate-do-db = mariamaster bind-address = 192.168.0.5 ...
В этом же файле выше есть строчка, которые надо закомментировать:
# bind-address = 127.0.0.1
Сохраняем файл и перезапускаем MariaDB
sudo systemctl restart mariadb или sudo systemctl restart mysql
6. Создаем пользователя для работы с Replication
Нам нужно добавить пользователя репликации на главный сервер, которого будет использовать удаленный сервер Slave. Для удаленного входа на главный сервер и запроса двоичных журналов. Шаблон выглядит так:
create user 'replicant'@'%' identified by 'replicant_password';
Особо менять ничего не будем, для простоты пояснения пароль сделаем как и пользователя (крайне не рекомендуем делать подобное на боевом сервере):
create user 'replicant'@'%' identified by 'replicant';
Дальше назначаем привилегии:
grant replication slave on *.* to replicant;
Делаем сброс таблицы привилегий:
flush privileges;
Продолжение рассмотрим во второй статье. Ссылка на статью: Настройка Master-Slave Replication на MariaDB (MySQL). Проверка и тестирование.
Источник: http://linuxsql.ru