前言:
(1)什么是主从复制
主从复制,是用来建立一个和数据库未完全一样的数据库环境,称为从数据库,主数据库
一般是准时的业务数据库。
(2)为什么要作主从复制
1、作数据的热备,作为后备数据库,主数据库服务器发生故障后,可以切换到从数据库继
续进行工作,避免数据丢失。
2、架构的扩张,业务量越来越大,IO访问频率过高,单机无法满足,此时作多库的存储,
降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3、实现读写分离时数据库能支撑更大的并发,在报表中尤其重要,由于部分报表sql语句非
常的慢,导致报表影响前台的服务,如果前台使用master,报表使用slave,那么报表sql将不
会造成前台锁,保证前台的速度。
(3)主从复制的原理?
1、数据库有个bin-log二进制文件,记录了所有的sql语句
2、我们的目标就是把主数据库的bin-log文件的sql语句复制过来。
3、让其在从数据的relay-log重做日志文件中再执行一下sql语句即可。
4、下面的主从配置就是围绕这个原理进行的配置
5、具体需要三个线程来进行操作:
1、 binlog输出线程:每当有从库连接到主库的时候,主库都会创建一个
线程然后发送binlog内容到从库,在从库里,当复制开始的时候,从库
就会创建两个线程进行处理。
2、从库I/O线程:当START SLAVE语句在库开始执行后,从库创建一个I/O
线程,该线程连接到主库并请求主库发送binlog里面的跟新记录到从库上,
从库I/O线程读取主库binlog。输出线程发送的更新并且拷贝这些更新到
本地文件,其中包括relay log 文件
3、从库的SQL线程:从库创建一个SQL线程,这个线程读取从库I/O线程
写道relay log更新事件并执行。
可以知道,对以每一个主从复制的连接,都有三个线程,拥有多个从库的主库
为每一个连接到主库的从库创建一个binlog输出线程,每一个都有它自己的I/O
线程和SQL线程。
(4)主从复制的过程?
1、主数据库(Master)将更新信息写入二进制日志文件中,这里
需要注意的是四版本的MYSQL数据库默认是不开二进制日志的,强烈
建议在安装数据库启动之前一定先检查一下二进制文件是否开启,即
使不做主从复制架构也要开启,否则当数据库启动之后再开启二进制
日志时需要重新加载数据库。
2、从数据库(Slave)开启一个I/O工作线程,通过该I/O线程与主数据库
建立一个普通客户端连接,主数据库会启动一个二进制日志传输线程,从数据库
的I/O线程通过这个传输线程读取主库上的变更时间,并将变更时间记录到中继
日志中(relay_lop),如果从数据库的IO线程读取速度追赶上主库的时间变更,
在没有得到跟新的通知时,IO线程会进入Sleep状态。
3、从数据库还会开启一个SQL Thread线程,这个线程从中继日志(relay_log)
中读取变更事件,并将变更同步到从数据库中,同时,可以通过配置选项,除了
将变更存储到数据库中,也可以将变更时间同时存储在从数据库的二进制日志中
(5)mysql主从复制存在的问题:
主库宕机后,数据可能发生丢失
从库只有一个sql Thread 主库写压力大,复制很可能延时
正文:
进行环境的配置:
master主库:server1(172.25.68.1)
salve从库 : server2(172.25.68.2)
一、进行数据库的安装
(1)master机和slave机都安装mysql
这里我们使用:mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar(可以进行官网的下载)
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar ###进行压缩包的解压
(2)在server1和server2上进行软件的安装
yum install mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-devel-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
###进行软件的安装