Как настроить репликацию 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
yum install mariadb-server mariadb-client
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
systemctl restart mariadb
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
Шаг 4 - Резервное копирование базы данных главного сервера и передача ее на ведомый
Введите следующую команду, чтобы вывести базы данных exampledb и сохранить их. Мы перенесем эти базы данных на подчиненный сервер позже:mysqldump exampledb -u root -p > exampledb.sql
Снова войдите в MySQL как пользователь root:
mysql -u root -p
MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> quit;
Здесь я собираюсь скопировать этот файл в папку / root / моего ведомого сервера. Так что команда будет:
scp exampledb.sql root@192.168.0.30:/root/
mysql_upgrade
процедуру для обновления системных таблиц (вам будет предложено ввести корневой пароль MariaDB):mysql_upgrade -u root -p
Шаг 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;
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
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 [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
Шаг 6 - Тестирование репликации базы данных MySQL / MariaDB
Подключитесь к основному серверу MariaDB:mysql -u root -p
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)
Комментариев 0