вводить
Почему 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,必须唯一
**Инструкции по настройке**
- log-bin: установить базовое имя двоичного файла журнала;
- log-bin-index: установить имя файла индекса бинарного журнала;
- binlog_format: управляет двоичным форматом журнала, который, в свою очередь, управляет типом репликации, три необязательных значения.
- -STATEMENT: репликация оператора
- -ROW: копия строки
- -MIXED: смешать и скопировать, вариант по умолчанию
- server-id: серверу задается уникальный ID, по умолчанию 1, рекомендуется брать последнюю часть IP;
- 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)