2. СУБД MariaDB на CentOS и настройка кластера MariaDB / MySQL

Установка MariaDB на CentOS и настройка кластера для репликации между двумя базами данных

Изначальная идея такова: Во-первых поднять сервер на котором будет несколько баз данных для различных сервисов, они будут доступны на удаленное использование. Установить саму СУБД и специальное ПО для администрирования. Настроить маршрутизацию, брандмаузер и особое внимание уделить безопасности. И наконец в будущем реализовать репликацию баз данных.  

Данную задачу можно реализовать как в LXC контейнере, так и на VM виртуальной машине, а можно и, вообще, на мощьном VDS выделенном сервере.

Все зависит от требований к серверу баз данных и нагрузке которая на него будет поступать. Мне к сожалению, придется все делать в LXC контейнере для простоты и удобства я буду использовать OS Centos.

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

Установка и запуск

Рассмотрим по отдельности процесс установки и настройки автозапуска MariaDB.

CentOS

Для CentOS 7 и 8 порядок действий не отличается. Устанавливаем MariaDB следующей командой:

yum install mariadb-server

Разрешаем автозапуск демона и запускаем его:

systemctl enable mariadb --now

После установки

Независимо от того, на какой Linux мы установили MariaDB, выполняем следующие действия.

1. Установим пароль для основной учетной записи СУБД:

mysqladmin -u root password
  • система запросит новый пароль. Его нужно ввести дважды.

 

2. Проверьте, что сервер работает, подключившись к нему:

mysql -uroot -p
  • будет запрошен пароль. Введите тот, который был установлен на предыдущем шаге инструкции.

Если появилось приглашение командной строки

MariaDB [(none)]>

значит сервер установлен и работает.

 

3. При необходимости, настройка сервера выполняется в файле /etc/my.cnf и подключаемых файлах в каталоге /etc/my.cnf.d/. После внесения изменений не забываем перезапустить службу:

systemctl restart mariadb

4. Если предполагается удаленное подключение к СУБД, добавляем правило в брандмауэр.

Firewalld:

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

Iptables:

iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
netfilter-persistent save

Подключение репозитория

В примерах выше мы установили СУБД из репозиториев операционных систем. А значит — нет гарантии, что будет установлена последняя версия MariaDB. Для решения задачи мы можем подключить официальный репозиторий самого разработчика. Для этого переходим по ссылке downloads.mariadb.org/mariadb/repositories и выбираем нашу версию операционной системы и последний стабильный релиз mariadb, например:

Выбираем нашу версию операционной системы и релиз mariadb

Ниже появится инструкция по добавлению репозитория и установке СУБД:

Инструкция по установке mariadb для выбранной системы

сервера к сети Интернет,

Шаг 1. Master - Slave

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

На обоих серверах сразу зайдем под пользователем root для более удобной работы:

$ sudo su

Также на обоих серверах откроем порт 3306, на котором работает сервер базы данных:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

Настройка сервера Master

Теперь на первом сервере откроем на редактирование конфигурационный файл MariaDB:

vi /etc/my.cnf.d/server.cnf

* в зависимости от версии СУБД, путь до конфигурационного файла может быть другим, например, vi /etc/my.cnf.

и приведем его к следующему виду:

[mysqld]
server-id = 1
log_bin = mysql-bin
log_error = mysql-bin.err
binlog_ignore_db = information_schema,mysql,test

*  server-id: идентификатор сервера, для каждой ноды кластера должен быть свой. log_bin: имя бинарного лог-файла. log_error: имя лог-файла с ошибками. binlog_ignore_db: перечисление баз данных, для которых не выполнять репликацию (в данном примере, исключены служебных базы).

Перезагружаем сервис, чтобы изменения вступили в силу:

systemctl restart mariadb

... или:

systemctl restart mysql

Подключаемся к MariaDB под учетной записью root:

mysql -uroot -p

И создаем служебную учетную запись для репликации:

MariaDB [(none)]> GRANT replication slave ON *.* TO "replmy"@"192.168.166.156" IDENTIFIED BY "password";

replmy: имя учетной записи (можно использовать любое). 192.168.166.156: IP-адрес второго сервера, с которым будем реплицировать данные. password: пароль для учетной записи (желательно, сложный).

Блокируем все таблицы всех баз для чтения и записи:

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;

* это заблокирует команды на запись. Поэтому, если сервер уже используется, лучше это сделать в нерабочее время.

Выведите состояние работы СУРБД:

MariaDB [(none)]> show master status\G

Результат будет, примерно, таким:

            File: mysql-bin.000005
        Position: 404
    Binlog_Do_DB:
Binlog_Ignore_DB: information_schema,mysql

Запомните или запишите значения для File и Position. Они понадобятся при настройке вторичной ноды кластера.

Если в MariaDB уже есть рабочие базы, выходим из оболочки:

MariaDB [(none)]> \q

и делаем резервную копию всех баз:

mysqldump -uroot -p --databases db1 db2 > /tmp/mydb_dump.sql

* данная команда сделает дамп баз db1, db2 и сохранит его в файл /tmp/mydb_dump.sql.

Теперь снова подключаемся к MariaDB:

mysql -uroot -p

и снимем ранее установленные блокировки:

MariaDB [(none)]> SET GLOBAL read_only = OFF;

и отключимся от СУРБД:

MariaDB [(none)]> \q

Полученный файл с резервной копией нужно перенести на второй сервер, например, при помощи такой команды:

scp /tmp/mydb_dump.sql dmosk@192.168.166.156:/tmp

* в данном примере, мы скопируем файл /tmp/mydb_dump.sql в каталог /tmp сервера 192.168.166.156 подключившись под учетной записью dmosk.

В процессе система может попросить принять сертификат: просто набираем yes

Are you sure you want to continue connecting (yes/no)? yes

и после вводим пароль для учетной записи dmosk на втором сервере.

Настройка сервера Slave

Теперь подключитесь ко второму серверу.

Откроем на редактирование конфигурационный файл MariaDB:

vi /etc/my.cnf.d/server.cnf

и приведем его к следующему виду:

[mysqld]
server-id = 2
replicate-ignore-table=db1.table1
replicate-ignore-table=db1.table2

*  server-id: напомню, что это идентификатор сервера и для каждой ноды кластера он должен быть уникальным. Также для слейва, при необходимости, мы можем указать, какие таблицы исключить из репликации.

Перезагружаем сервис, чтобы изменения вступили в силу:

systemctl restart mariadb

... или:

systemctl restart mysql

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

mysql -v -uroot -p < /tmp/mydb_dump.sql

* файл /tmp/mydb_dump.sql мы скопировали с первого сервера.

Теперь подключимся к MariaDB:

mysql -uroot -p

и введем такую команду:

MariaDB [(none)]> change master to master_host = "192.168.166.155", master_user = "replmy", master_password = "password", master_log_file = "mysql-bin.000005", master_log_pos = 404;

192.168.166.155: IP-адрес моего первого сервера. replmy: учетная запись для репликации, которая была создана на первом сервере. password: пароль для учетной записи, также был сделан на первом сервере. mysql-bin.000005: имя файла, которое мы должны были записать или запомнить (у вас может быть другим). 404: номер позиции, с которой необходимо начать репликацию (также должны были записать или запомнить ранее).

Теперь запустим вторичный сервер для репликации:

MariaDB [(none)]> start slave;

И проверим состояние репликации:

MariaDB [(none)]> SHOW SLAVE STATUS\G

Обратите внимание на поля Read_Master_Log_Pos и Exec_Master_Log_Pos. Они должны отличаться от начального значения (в нашем примере, 404). Также посмотрите на поле Last_IO_Error — оно должно быть пустым.

Отключитесь от mariadb:

MariaDB [(none)]> \q

Настройка кластера в режиме Master - Slave закончена.

Чтобы проверить, насколько хорошо работает репликация, попробуйте внести изменение на первом сервере — на втором оно должно появиться, почти, сразу.

Шаг 2. Настройка кластера MariaDB в режиме Master - Master

Если одностороннего режима копирования данных нам недостаточно, продолжаем настройку.

Настройка на сервере Slave

На втором сервере откроем конфигурационный файл MariaDB:

vi /etc/my.cnf.d/server.cnf

и допишем в него следующее:

log_bin=mysql-bin
log_error=mysql-bin.err
binlog-ignore-db=information_schema,mysql,test

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

systemctl restart mariadb

Теперь подключимся к MariaDB:

mysql -uroot -p

и создадим учетную запись для репликации с первого сервера:

MariaDB [(none)]> GRANT replication slave ON *.* TO "replmy"@"192.168.166.155" IDENTIFIED BY "password";

replmy: имя учетной записи (можно использовать любое). 192.168.166.155: IP-адрес первого сервера, с которым будем реплицировать данные. password: пароль для учетной записи (желательно, сложный).

Выведем состояние работы мастера:

MariaDB [(none)]> show master status\G

Как и при настройке первого сервера, запомните или запишите значения для File и Position.

Настройка на сервере Master

Теперь подключитесь к первому серверу.

И зайдем в командную оболочку MariaDB:

mysql -uroot -p

введем такую команду:

MariaDB [(none)]> change master to master_host = "192.168.166.156", master_user = "replmy", master_password = "password", master_log_file = "mysql-bin.000003", master_log_pos = 245;

192.168.166.156: IP-адрес моего второго сервера. replmy: учетная запись для репликации, которая была создана на втором сервере. password: пароль для учетной записи, также был сделан на втором сервере. mysql-bin.000003: имя файла, которое мы должны были записать или запомнить (у вас может быть другим). 245: номер позиции, с которой необходимо начать репликацию (также должны были записать или запомнить ранее).

Теперь запустим вторичный сервер для репликации:

MariaDB [(none)]> start slave;

И проверим состояние репликации:

MariaDB [(none)]> SHOW SLAVE STATUS\G

Отключитесь от СУРБД:

MariaDB [(none)]> \q

Настройка кластера в режиме Master - Master закончена.

Теперь остается окончательно убедиться, что репликация работает. Внесите изменения на первом сервере — они должны попасть на второй. И наоборот, при внесении изменений на втором сервере, они должны попадать на первый.

Подробнее читайте тут:

Продолжение: https://winitpro.ru/index.php/2019/09/03/mariadb-replikaciya-baz-master-slave/
  • mysql
  • 0 Els usuaris han Trobat Això Útil
Ha estat útil la resposta?

Articles Relacionats

1. МYSQL на Ubuntu

Обновляем систему: apt-get updateapt-get upgrade   Устанавливаем sudo: apt-get install sudo...

3. Быстрое создание горячей РК MYSQL с одновременным копированием на удаленный сервер

Иногда встречается ситуация, когда нужно развернуть полную копию MySQL на другом сервере....

4. Восстановление MySQL из горячей (hotbackup) резервной копии

В предыдущей статье мы рассмотрели вопрос создания горячей резервной копии MySQL с одновременным...