Поиск по сайту:

Как настроить репликацию MariaDB (Master-Slave) в CentOS/RHEL 7 и Debian 8/9


Даже когда некоторые ИТ-специалисты слышат фразу «Репликация базы данных», они часто связывают ее с необходимостью иметь несколько копий одной и той же информации, чтобы избежать потери данных в случае сбоя оборудования или повреждения данных. Хотя в некоторой степени это верно, репликация базы данных — это нечто большее, чем просто общая концепция резервного копирования базы данных и доступности данных.

Среди других преимуществ репликации базы данных в схеме «главный-подчиненный» можно отметить:

  1. Резервное копирование может выполняться на подчиненном сервере, не затрагивая (и не подвергаясь влиянию) операций записи на главном сервере.
  2. Ресурсоемкие операции (например, анализ данных) могут выполняться на ведомом устройстве, не влияя на производительность ведущего устройства.

В этой статье мы объясним, как настроить репликацию master-slave в MariaDB 10.1. В отличие от классической репликации, MariaDB представила концепцию Идентификаторов глобальных транзакций (GTID) в v10.0, которая позволяет менять подчиненное устройство на легко подключаться к другому мастеру и выполнять репликацию с него. Кроме того, состояние ведомого устройства записывается безопасным для сбоев способом (обновления состояния выполняются в той же транзакции, что и обновления данных).

Если вам нужна репликация MySQL в CentOS/RHEL 6, следуйте этому руководству. Настройка репликации MySQL (Master-Slave) в CentOS/RHEL 6.

Установка MariaDB 10.1 в CentOS/RHEL 7 и Debian 8/9

Наша тестовая среда состоит из следующих компьютеров (оба — CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Чтобы установить последнюю версию MariaDB, нам нужно будет добавить их репозитории на наши серверы. Если вы используете более старую версию MariaDB, скажем, 5.5, рассмотрите возможность обновления до последней версии 10.1, используя статью ниже.

  1. Обновление MariaDB 5.5 до MariaDB 10.1.

В CentOS/RHEL

Создайте файл с именем MariaDB.repo внутри /etc/yum.repos.d со следующим содержимым как на Master, так и на Slave<. системы:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Сохраните файл и установите MariaDB на оба сервера, используя yum:

yum update && yum install MariaDB-server MariaDB-client

В Дебиан/Убунту

Добавьте ключ для аутентификации пакетов и репозитория MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Примечание. Замените имя и кодовое имя распространения в выделенной выше строке.

Установите с помощью команды apt-get:

apt-get update
apt-get install mariadb-server

После установки MariaDB запустите процедуру mysql_secure_installation как на главном, так и на подчиненном компьютере. Давайте настроим образец тестовой базы данных на главном компьютере.

Настройка образца базы данных MySQL на Master

Теперь мы настроим на главном сервере базу данных Сотрудники из https://github.com/datacharmer/test_db (которая предоставляет набор данных 4 ). миллион записей, распределенных по шести таблицам) в два простых шага:

Клонируйте репозиторий и используйте его для импорта примера базы данных в вашу установку MariaDB:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Настройка MySQL-сервера на мастере

Чтобы настроить мастер, выполните следующие действия:

ШАГ 1. Отредактируйте файл /etc/my.cnf. В разделе [mysqld] добавьте следующие четыре строки:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

и перезапустите MariaDB:

systemctl restart mariadb

ШАГ 2: Войдите на сервер MariaDB как пользователь root, создайте подчиненного пользователя и назначьте необходимые разрешения:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

Команда last (SHOW MASTER STATUS) возвращает текущую позицию в двоичном журнале (точные координаты, указывающие, с какой именно точки ведомое устройство должно начать репликацию:

ШАГ 3. Выйдите из командной строки MariaDB (с помощью exit;) и используйте следующую команду, чтобы сделать снимок базы данных сотрудников. Когда вы нажмете Enter, вам будет предложено ввести пароль для root, который вы установили ранее с помощью mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

После завершения дампа снова подключитесь к серверу базы данных, чтобы разблокировать таблицы, а затем выйдите:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

ШАГ 4: Скопируйте дамп на подчиненное устройство:

scp employees-dump.sql [email :/root/ 

ШАГ 5: Запустите процедуру mysql_upgrade для обновления системных таблиц (вам будет предложено ввести корневой пароль MariaDB):

mysql_upgrade -u root -p

ШАГ 6. Разрешите службу базы данных через брандмауэр:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Теперь давайте настроим подчиненное устройство.

Настройка MySQL-сервера на подчиненном сервере

Чтобы настроить ведомое устройство, выполните следующие действия:

ШАГ 1. Создайте учетную запись для выполнения задач репликации. Подключитесь к локальному серверу MariaDB с помощью:

mysql -u root –p

и введите пароль, который вы установили ранее.

ШАГ 2. После подключения к серверу базы данных создайте пользователя и пустую базу данных и предоставьте разрешения:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

ШАГ 3. Выйдите из командной строки MariaDB и загрузите дамп, созданный на главном сервере:

mysql -u root -p employees < employees-dump.sql

ШАГ 4: Отредактируйте файл /etc/my.cnf, чтобы назначить ID сервера подчиненному устройству в [mysqld] раздел. Обратите внимание, что это должно быть целое число, отличное от 1, поскольку мы использовали 1 в мастере:

server_id=2
replicate-do-db=employees

Перезапустите сервер базы данных:

systemctl restart mariadb

ШАГ 5: Запустите процедуру mysql_upgrade для обновления системных таблиц (вам будет предложено ввести корневой пароль MariaDB):

mysql_upgrade -u root -p

ШАГ 6: После того, как дамп импортирован на ведомое устройство, осталось всего несколько шагов, чтобы начать репликацию. Войдите в базу данных и выполните следующие команды в командной строке MariaDB. Обратите особое внимание на переменные MASTER_LOG_FILE и MASTER_LOG_POS, которые должны соответствовать значениям, возвращаемым функцией SHOW MASTER STATUS на ШАГЕ 2 раздела «Настройка главного устройства». выше.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

ШАГ 7: Запустите подчиненное устройство и проверьте его состояние, не выходя из командной строки MariaDB:

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

Не то чтобы вам это сейчас нужно, но учтите, что вы можете остановить ведомое устройство с помощью:

MariaDB [(none)]> STOP SLAVE;

если команда SHOW SLAVE STATUS\G; возвращает какие-либо ошибки. Используйте эти ошибки для устранения неполадок, а затем запустите START SLAVE; для повторного тестирования.

Тестирование репликации базы данных MySQL/MariaDB

Добавим запись в таблицу employees на главном сервере:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Затем убедитесь, что это изменение было реплицировано на подчиненном устройстве:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Как видите, репликация от мастера к слейву работает корректно.

Краткое содержание

В этой статье мы объяснили, как установить последнюю версию MariaDB в CentOS/RHEL 7 и Debian 8/9, а также обсудили, как настроить репликацию master-slave с помощью GTID. Для получения дополнительной информации вы можете обратиться к Руководству по репликации MariaDB. Если у вас есть вопросы или комментарии, не стесняйтесь обращаться к нам, используя форму ниже.