Как настроить репликацию MySQL Master-Slave в CentOS 7

Введение

Из этого туториала вы узнаете, как настроить репликацию главный-подчиненный MariaDB в CentOS 7. MariaDB - это зрелая, стабильная реляционная база данных с открытым исходным кодом, созданная на основе MySQL. Репликация - это функция в MariaDB, которая позволяет зеркально отображать данные на одном сервере на другом сервере.
Репликация MariaDB основана на двоичном журнале (binlog) . Целью двоичного журнала является обеспечение возможности репликации, резервного копирования и восстановления баз данных.
Предпосылки
Чтобы использовать это руководство, убедитесь, что вы вошли на свой сервер с пользователем sudo.
Наша среда тестирования состоит из следующих машин (оба - CentOS 7):
Master: 192.168.0.20
Slave: 192.168.0.30

Шаг 1 - Установка MariaDB

Чтобы установить последнюю версию MariaDB, нам нужно будет добавить их репозитории на наши серверы. Если вы используете более старую версию MariaDB, например, 5.5, рассмотрите возможность обновления до последней версии 10.4.5 с помощью этого руководства.
Создайте файл с именем MariaDB.repoвнутри /etc/yum.repos.dсо следующим содержимым в ведущей и ведомой системах:
vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.4.5 CentOS repository list - created 2019-May-21 11:42:15
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Сохраните файл и установите MariaDB на обоих серверах, используя yum:
yum install mariadb-server mariadb-client
Затем запустите и включите сервис MariaDB:
systemctl start mariadb
systemctl enable mariadb

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

Теперь мы настроим базу данных exampledb на главном сервере:
mysql -u root -p
MariaDB [(none)]> CREATE DATABASE exampledb;
MariaDB [(none)]> USE exampledb;
MariaDB [(none)]> CREATE TABLE authors (id INT, name VARCHAR(20), email VARCHAR(20));
MariaDB [(none)]> exit;

Шаг 3 - Настройка MySQL Server на Master

Чтобы настроить мастер, отредактируйте /etc/my.cnfфайл. Под [mysqld]разделом добавьте следующие четыре строки:
vi /etc/my.cnf
[mysqld]
log-bin
server_id=1
replicate-do-db=exampledb
bind-address=192.168.0.20
Затем перезапустите сервис MariaDB:
systemctl restart mariadb
Войдите на сервер MariaDB от имени пользователя root, создайте ведомого пользователя и назначьте необходимые права доступа:
mysqld -u root -p
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;
MariaDB [(none)]> exit;
Пример вывода:
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
Query OK, 0 rows affected (0.006 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.006 sec)

MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000003 |      812 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

MariaDB [(none)]> exit
Bye
Запишите файл master-bin.000003 и номер позиции 812 , эти значения понадобятся вам позже.

Шаг 4 - Резервное копирование базы данных главного сервера и передача ее на ведомый

Введите следующую команду, чтобы вывести базы данных exampledb и сохранить их. Мы перенесем эти базы данных на подчиненный сервер позже:
mysqldump exampledb -u root -p > exampledb.sql
Это создаст файл с именем exampledb.sql в вашем текущем рабочем каталоге. Это займет некоторое время в зависимости от размера базы данных.
Снова войдите в MySQL как пользователь root:
mysql -u root -p
MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> quit;
Скопируйте файл exampledb.sql на ваш подчиненный сервер.
Здесь я собираюсь скопировать этот файл в папку / root / моего ведомого сервера. Так что команда будет:
scp exampledb.sql root@192.168.0.30:/root/
Запустите mysql_upgradeпроцедуру для обновления системных таблиц (вам будет предложено ввести корневой пароль MariaDB):
mysql_upgrade -u root -p
Помните, 192.168.0.30 - ваш IP-адрес подчиненного сервера MariaDB.

Шаг 5 - Настройка MySQL Server на подчиненном

Для настройки подчиненного устройства подключитесь к локальному серверу MariaDB с помощью:
mysql -u root -p
После подключения к серверу базы данных создайте пользователя и пустую базу данных и предоставьте разрешения:
MariaDB [(none)]> CREATE DATABASE exampledb;
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON exampledb.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
Выйдите из командной строки MariaDB exit;и загрузите дамп, созданный на главном сервере:
mysql -u root -p exampledb < exampledb.sql
Отредактируйте /etc/my.cnfфайл, чтобы назначить идентификатор сервера ведомому в [mysqld]разделе. Обратите внимание, что это должно быть целое число, отличное от 1, так как мы использовали 1 в master:
[mysqld]
server_id=2
replicate-do-db=exampledb
Перезапустите сервер базы данных:
systemctl restart mariadb
Запустите mysql_upgradeпроцедуру для обновления системных таблиц (вам будет предложено ввести корневой пароль MariaDB):
mysql_upgrade -u root -p
Как только дамп был импортирован в ведомое устройство, нам нужно всего лишь несколько шагов, чтобы начать репликацию. Войдите в базу данных и выполните следующие команды в приглашении MariaDB. Обратите особое внимание на переменные MASTER LOG FILE и MASTER LOG POS , которые должны соответствовать значениям, возвращаемым SHOW MASTER STATUS в ШАГЕ 3 «Настройка MySQL Server на Master» выше.
mysql -u root -p
MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.20',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000003',
  MASTER_LOG_POS=812,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;
Запустите ведомое устройство и проверьте его состояние, не выходя из приглашения MariaDB:
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

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

Подключитесь к основному серверу MariaDB:
mysql -u root -p
Добавьте запись в таблицу exampledb на главном сервере:
MariaDB [(none)]> use exampledb;
MariaDB [(none)]> INSERT INTO authors (id, name, email) VALUES (1, 'Your Name', 'email@example.com');
MariaDB [(none)]> exit;
Затем убедитесь, что это изменение было реплицировано в ведомое устройство:
MariaDB [(none)]> USE exampledb;
MariaDB [(none)]> SELECT * FROM authors WHERE id=1;
Пример вывода:
MariaDB [exampledb]> SELECT * FROM authors WHERE id=1;
+------+-----------+-------------------+
| id   | name      | mail              |
+------+-----------+-------------------+
|    1 | Your Name | email@example.com |
+------+-----------+-------------------+
1 row in set (0.001 sec)
Как видите, репликация работает правильно от главного к подчиненному.

Вывод

В этом уроке мы объяснили, как установить последнюю версию MariaDB в CentOS 7, и обсудили, как настроить репликацию главный-подчиненный с GTID. Для получения дополнительной информации вы можете обратиться к руководству по репликации MariaDB

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0