Продолжим. Если вы не читали статью ранее, сначала изучите её:
Настройка Master-Slave Replication на MariaDB (MySQL). Начало.
В этой статье разберем:
1. Настраиваем конфигурационный файл 50-server.cnf на Slave
Открываем файл 50-server.cnf на Slave, и заполняем по аналогии (как мы заполняли Master):
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
В файле находим строчку блока «Logging and Replication». В конце этого блока начинаем прописывать наши параметры:
[mysqld] server-id = 02 relay-log-index = /var/log/mysql/slave-relay-bin.index relay-log = /var/log/mysql/slave-relay-bin replicate-do-db = wordpress replicate-do-db = mariamaster read-only = 1 bind-address = 192.168.0.6
Новая строчка:
read-only = 1 - данная строчка означает: "Только чтение".
Не забываем закомментировать строку:
# bind-address = 127.0.0.1
Сохраняем файл и перезапускаем MariaDB:
sudo systemctl restart mariadb
Наши сервера почти готовы к процессу репликации. На данном этапе работу со Slave пока прекращаем.
2. Дамп базы данных на Slave. Перенос на Slave
Нам нужно скопировать наши базы данных с главного сервера на подчиненный. И только потом запускать процесс репликации. Возвращаемся в Master. Заходим в базу данных и вводим команду блокировки:
> flush tables with read lock;
Проверяем статус мастера:
MariaDB [(none)]> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000001 | 772 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.000 sec)
Важно: НЕ выходя из монитора MariaDB, делаем дамп базы. Если выйти, то это снимет блокировку.
Открываем второй терминал и там делаем дамп базы данных. Делать его будем в какой-то определенной папке. Мы делали в папке пользователя(дамп делается не в самой базе MariaDB, а в терминале Debian).
sudo mysqldump -u root mariamaster > mariamaster.sql sudo mysqldump -u root wordpress > wordpress.sql
Напоминаем: если вы не помните как называется ваша база данных, в MariaDB введи команду "show databases;".
Как только мы сделали бэкап базы данных, разблокируем базы и сделаем выход из MariaDB:
> unlock tables; > exit;
Теперь нам нужно перенести файлы баз данных на Slave. Самое простое использовать команду scp. Использование данной команды описывать я не буду, можете почитать отдельно. Скажу только, что у меня настроен SSH от Master к Slave:
scp /home/debuser/Документы/MariaDB_MS debiuser@192.168.0.6:/home/debiuser/Документы/
Если у вас будет ошибка, скорее всего у вас проблема с правами как на файлы дампа, так и на созданную папку. Не забываем проверить права, при копировании. Если вы будете копировать пользователем, а у вас дамп сделан с правами root, он вам ничего не скопирует. Команда "sudo chown" вам в помощь.
3. Восстановление баз данных на Slave
После того как мы все скопировали, необходимо создать пустые базы (с такими же именами, как в дампах). Для этого на Slave заходим в базу MariaDB и вводим команды:
CREATE DATABASE wordpress; CREATE DATABASE mariamaster;
Проверяем наши вновь созданные базы и выходим из MariaDB:
SHOW DATABASES; exit;
Уже в терминале восстанавливаем наш бэкап баз из дампа:
sudo mysql -u root wordpress < wordpress.sql sudo mysql -u root wordpress < mariamaster.sql
Делаем перезагрузку MariaDB:
sudo systemctl restart mariadb
Мы сделали идентичные базы на Master и Slave, в одинаковом первоначальном состоянии. И только после этого, можно приступать к подключению.
4. Репликация: подключаем Slave к Master
Для того чтобы подключить Slave к Master, нужно на подчиненном сервере (Slave) зайти в MariaDB и ввести следующие значения (сначала их составьте в блокноте, потом вставляйте в консоль базы):
MariaDB [(none)]> change master 'master01' to master_host='192.168.0.5', master_user='replicant', master_password='replicant', master_port=3306, master_log_file='master-bin.000001', master_log_pos=772, master_connect_retry=10, master_use_gtid=slave_pos;
В данных выше мы указали:
Начинаем соединение в MariaDB на Slave:
> start slave 'master01';
Проверяем статус в MariaDB на Slave:
show slave 'master01' status\G;
и получим следующее:
MariaDB [(none)]> show slave 'master01' status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.0.5 Master_User: replicant Master_Port: 3306 Connect_Retry: 10 Master_Log_File: master-bin.000009 Read_Master_Log_Pos: 343 Relay_Log_File: slave-relay-bin-master01.000002 Relay_Log_Pos: 643 Relay_Master_Log_File: master-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: wordpress,mariamaster Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 343 Relay_Log_Space: 961 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: Slave_Pos Gtid_IO_Pos: 0-1-4 Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservative SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_DDL_Groups: 0 Slave_Non_Transactional_Groups: 0 Slave_Transactional_Groups: 0 1 row in set (0.001 sec) ERROR: No query specified
Если вы не видите ошибок в выводе, это означает, что репликация работает хорошо. Вы должны увидеть следующие два «Yes», указывающие, что все идет хорошо:
... Slave_IO_Running: Yes Slave_SQL_Running: Yes ...
И?... cкажете вы, где тут проверка, что все работает? Ранее мы создавали тестовую таблицу, вот на ней и будем проверять! Читаем дальше.
* Некоторые полезные команды:
5. Проверка работы репликации
Вариант 1
На мастере делаем команду:
MariaDB [(none)]> show variables like 'gtid_binlog_pos'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | gtid_binlog_pos | 0-1-4 | +-----------------+-------+ 1 row in set (0.002 sec)
Далее на подчиненном сервере выполняем:
MariaDB [(none)]> show variables like 'gtid_slave_pos'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | gtid_slave_pos | 0-1-4 | +----------------+-------+ 1 row in set (0.002 sec)
Если эти два значения совпадают, то изменения данных на ведущем устройстве копируются на ведомое устройство.
И что? Не верю! Тогда 100% вариант ниже.
Вариант 2
На мастере заходим в базу данных и переходим в таблицу для тестов "mariamaster":
USE mariamaster;
Вносим новые данные:
INSERT INTO equipment (type, install_date, color, working, location) VALUES ("Swing", Now(), "green", 1, "Northwest Corner");
Проверяем данные:
SELECT * FROM equipment;
Выходим...
... Заходим в базу данных на Slave. Переключаемся в нашу базу и проверяем таблицу:
MariaDB [mariamaster]> USE mariamaster; MariaDB [mariamaster]> SELECT * FROM equipment; +----------+-------+--------------+-------+---------+------------------+ | equip_id | type | install_date | color | working | location | +----------+-------+--------------+-------+---------+------------------+ | 1 | Slide | 2019-10-02 | blue | 1 | Southwest Corner | | 2 | Swing | 2019-10-02 | green | 1 | Northwest Corner | +----------+-------+--------------+-------+---------+------------------+ 2 rows in set (0.001 sec)
Таблица отразилась! Репликация полностью работает! Всем спасибо, кто читал)
Источник: http://linuxsql.ru