Репликация master-slave MySQL

MySQL

вводить

Почему master-slave репликация

  • Сделайте резервную копию данных

  • Если первичная база данных выйдет из строя, бизнес-система может быть быстро переключена на вторичную базу данных, чтобы избежать потери данных.

  • Объем бизнеса увеличивается, а частота доступа к вводу-выводу слишком высока, что не может быть удовлетворено одной машиной.В настоящее время выполняется хранение нескольких баз данных, чтобы уменьшить частоту доступа к диску ввода-вывода и улучшить Производительность ввода/вывода одной машины. Если и чтение, и запись в базу данных выполняются на одном и том же сервере базы данных, производительность бизнес-системы снизится.

  • В системе со сложным бизнесом есть такой сценарий.Есть оператор sql который должен заблокировать таблицу,чтобы сервис чтения нельзя было использовать временно,тогда это сильно повлияет на работающий бизнес.Используйте master-slave репликацию, пусть мастер-библиотека отвечает за запись, а слейв-библиотека за чтение, чтобы даже если мастер-библиотека блокировала таблицу, нормальную работу дела можно было гарантировать чтением слейв-библиотеки. Уменьшите нагрузку на первичную базу данных, выполнив репликацию master-slave (разделение чтения и записи).

принцип

  • Шаг 1: События обновления (обновление, вставка, удаление) базы данных основной базы данных записываются в binlog.
  • Шаг 2. Инициируйте подключение из библиотеки и подключитесь к основной библиотеке.
  • Шаг 3: В это время основная библиотека создает поток дампа binlog и отправляет содержимое binlog в подчиненную библиотеку.
  • Шаг 4: После запуска подчиненной библиотеки создайте поток ввода-вывода, прочитайте содержимое binlog из основной библиотеки и запишите его в журнал реле.
  • Шаг 5: Также будет создан поток SQL для чтения содержимого из журнала ретрансляции и изExec_Master_Log_PosМестоположение начинает выполнять событие обновления чтения и записывает содержимое обновления в базу данных подчиненного устройства.

Примечание: Приведенное выше объяснение предназначено для объяснения того, что делает каждый шаг.Вся репликация mysql master-slave является асинхронной, а не выполняется в соответствии с вышеуказанными шагами.

Операция синхронизации реализуется тремя потоками, и основные шаги таковы:

主服务器将数据的更新记录到二进制日志中(记录被称作二进制日志事件)-- 主库线程;
从库将主库的二进制日志复制到本地的中继日志(relay log)-- 从库 I/O 线程;
从库读取中继日志中的事件,将其重放到数据中 -- 从库 SQL 线程。

репликация master-slave

Готов к работе

  • Версия базы данных master-slave лучше всего согласована
  • Данные в базе данных master-slave согласованы
  • Основная база данных: 10.168.1.248 Ведомая база данных: 10.168.1.249

Настройте основную библиотеку Master

Изменить конфигурацию MySQL

Найти профиль основной базы данных my.cnf, мой/etc/my.cnf

vi /etc/my.cnf

Вставьте в раздел [MySQLD]

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id,必须唯一

**Инструкции по настройке**

  1. log-bin: установить базовое имя двоичного файла журнала;
  2. log-bin-index: установить имя файла индекса бинарного журнала;
  3. binlog_format: управляет двоичным форматом журнала, который, в свою очередь, управляет типом репликации, три необязательных значения.
  4. ​ -STATEMENT: репликация оператора
  5. -ROW: копия строки
  6. ​ -MIXED: смешать и скопировать, вариант по умолчанию
  7. server-id: серверу задается уникальный ID, по умолчанию 1, рекомендуется брать последнюю часть IP;
  8. sync-binlog: значение по умолчанию равно 0. Чтобы гарантировать, что данные не будут потеряны, необходимо установить значение 1, чтобы принудительно синхронизировать двоичный журнал с диском каждый раз при фиксации транзакции.

Создать пользователя

Перезапустите службу, создайте пользователя для синхронизации

открыть оболочку сеанса mysql

mysql -uroot -p

Создайте пользователя и авторизуйтесь: user:replpassword:repl'

# 创建用户
create user 'repl'@'10.168.1.249' identified by 'repl';

# 授权,只授予复制和客户端访问权限
grant replication slave on *.* to 'repl'@'10.168.1.249';#分配权限

Посмотреть основной статус

Обратите внимание на имя двоичного файла (mysql-bin.000001) и местоположение (154):

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1416 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

Настройка ведомой библиотеки

Изменить конфигурацию MySQL

Найдите файл конфигурации my.cnf основной базы данных, мой находится в/etc/my.cnf

vi /etc/my.cnf

Вставьте в раздел [mysqld]

[mysqld]
server-id=2 #设置server-id,必须唯一

Выполнять синхронные операторы SQL

Перезапустите mysql, откройте сеанс mysql и выполните синхронный оператор SQL (требуется имя хоста главного сервера, учетные данные для входа, имя и расположение двоичного файла):

mysql> CHANGE MASTER TO
    -> MASTER_HOST='10.168.1.248',
    -> MASTER_USER='repl',
    -> MASTER_PASSWORD='repl',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=1416;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

Запустите процесс синхронизации подчиненного устройства

mysql>start slave;

Посмотреть статус ведомого

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.168.1.248
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 1917
               Relay_Log_File: sl249-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
          				......

Если и Slave_IO_Running, и Slave_SQL_Running имеют значение YES, это означает, что настройка синхронизации ведущий-ведомый выполнена успешно.

проверять

  • главный сервер

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> create database mysql_test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | mysql_test         |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)
    
  • подчиненный сервер

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | mysql_test         |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)