目录
- 一:MySQL 主从复制介绍
- 二: 异步单线程主从复制
- 1. 主服务器配置流程
- 2. 从服务器配置
- 二:异步多线程主从复制
- 1. 配置流程
一:MySQL 主从复制介绍
MySQL
主从复制是MySQL
官方提供的一种数据备份容灾和负载均衡技术。
-
数据容灾:主从复制通过将主服务器(master)上的数据更改实时复制到从服务器(slave)上,实现数据的实时备份。
-
负载均衡:配置好主从复制后,可以将写操作(INSERT、UPDATE、DELETE)指向主服务器,将读操作(SELECT)分散到从服务器上,从而实现读写分离。
实现原理
1、主服务器上,所有的数据更改操作都会记录到二进制日志(binary log)中。
2、从服务器上:通过 I/O
线程读取主服务器上的二进制日志,并将这些日志写入自己的中继日志(relay log)。然后SQL 线程读取中继日志并执行其中的 SQL 语句,从而使从服务器上的数据与主服务器保持一致。
二: 异步单线程主从复制
一般我们配置的主从复制都是这种,主服务器将更改的数据写入二进制日志后,不管从服务器是否已经完成同步。 所以负载高的时候会有延迟,并且主服务器挂了可能会导致部分数据的丢失。
-
启动单个IO线程读取主服务器的二进制日志
-
启动单个SQL线程来读取中继日志并执行其中的 SQL 语句,实现数据同步。
1. 主服务器配置流程
(1)配置二进制日志
[mysqld]
server-id = 145 # 需要唯一
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 14
max_binlog_size = 256M
(2)创建复制账户,从服务器通过这个账户来获取二进制日志中的数据
mysql> create user replica@'%' identified by 'eHIGH2014';
Query OK, 0 rows affected (0.01 sec)# 用于复制的用户需要有 REPLICATION SLAVE 这两个权限
mysql> grant all privileges ON *.* to replica@'%';
Query OK, 0 rows affected (0.01 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2. 从服务器配置
(1)开启中继日志(不用手动配置,系统自动就开启了的)
(2)设置一个唯一的 server id
[mysqld]
server-id = 146
(3)从服务器使用指定的用户和连接信息从主服务器获取二进制日志(binary log)数据
change master tomaster_host="192.168.12.145",master_port=3306,master_user="replica",master_password="eHIGH2014", master_log_file='mysql-bin.000001', -- 明确指定日志文件master_log_pos=157; -- 明确指定日志位置
Query OK, 0 rows affected, 8 warnings (0.03 sec)
(1)如果没有指定从哪个二进制文件(master_log_file
)和具体的位置(master_log_pos
)开始复制,默认就是从主服务器当前的二进制日志位置开始复制。
(2)执行这个步骤的时候,IO线程会连接到主服务器,此时主服务器会开启一个dump 线程,通过dump线程将主服务器上的二进制日志事件发送给从服务器的 I/O 线程。
(4)启动两个线程,开始主从复制
# 方法一:不指定线程名称,两个线程会一起开启
START SLAVE;# 方法二:分别开启两个线程
START SLAVE IO_THREAD;
START SLAVE SQL_THREAD;
(5)验证复制状态
SHOW SLAVE STATUS\G
主要关注 I/O线程 和 SQL线程 是否在运行
# 两个都是YES,说明同步正常Slave_IO_Running: YES
Slave_SQL_Running: YES
二:异步多线程主从复制
这种方式是为了解决单线程复制时,主机和从机复制延迟的问题。通过多线程来提高复制性能。
-
I/O 线程始终只有一个。这是因为主服务器上的二进制日志是线性顺序写入的,单个 I/O 线程足以处理这个顺序读取和写入中继日志的工作。
-
可以配置多个 SQL 线程,每个 SQL 线程并行处理中继日志中的不同事件,以提高复制的并行度和性能。
从服务器使用多个 SQL 线程并行处理不同的复制工作负载,从而加速从服务器应用二进制日志事件的过程。
1. 配置流程
配置流程和异步单线程主从复制流程一样,但是从服务器需要再添加以下配置来配置线程数量:
[mysqld]
# 启用 4 个并行 SQL 线程,指定SQL线程数量,一般多少个CPU就指定数量为几。
slave_parallel_workers = 4# 并行复制的调度策略设置为数据库级别(默认就是),这适合多个数据库主从复制且不用复杂化配置
slave_parallel_type = DATABASE