mysql优化系列(十八)- mysql主从复制
前言
随着系统中业务访问量的增大,如果是单机部署服务器,就会导致 I/O 访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单个机器的 I/O 性能。
# 一、认识主从与主从的原理
MySQL Replication (MySQL 主从复制) 是什么?为什么要主从复制以及它的实现原理是什么?
1.1 主从复制概念
mysql主从复制是指数据可以从一个mysql数据库服务器主节点复制到一个或多个从节点。mysql默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制 主数据库中的所有数据库或者特定的数据库,或者特定的表。
主要用途:
1.
读写分离
在开发工作中,有时候会遇到某个sql语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。2.数据实时备份,当系统中的某个节点发生故障时,可以方便的故障切换
3.高可用HA
4.架构扩展
2.2 mysql主从复制原理
MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:
- 主节点 binary log dump 线程 当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁, 当读取完成,甚至在发动给从节点之前,锁会被释放。
- 从节点I/O线程 当从节点上执行
start slave
命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。
- 从节点SQL线程 SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。
对于每一个主从连接,都需要三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都 有自己的I/O进程,SQL进程。从节点用两个线程将从主库拉取更新和执 行分成独立的任务,这样在执行同步数据任务的时候,不会降低读操作的性能。比如, 如果从节点没有运行,此时I/O进程可以很快从主节点获取更新,尽管SQL进程还没有执行。如果在SQL进程执行之前从节点服务停止,至少I/O进 程已经从主节 点拉取到了最新的变更并且保存在本地relay日志中,当服务再次起来之后,就可以完成数据的同步。
主从复制的步骤:
- 主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程
- 从库生成两个线程,一个是I/O线程,另一个是SQL线程
- I/O线程去请求主库的binlog日志,并将binlog日志中的文件写入relay log(中继日志)中
- SQL线程会读取relay loy中的内容,并解析成具体的操作,来实现主从的操作一致,达到最终数据一致的目的
配置主从的步骤
- 确保从数据库与主数据库里的数据一致
- 在主数据库里创建一个同步账户授权给从数据库使用
- 配置主数据库(修改配置文件)与开启binlog日志
二、mysql用户安全策略=》8.0版本
1.
看到 18-3