MySQL主从复制和读写分离

目录

主从复制

主从复制的原理

主从复制的过程

主从复制的分类

主从复制的作用

主从复制的同步模式

(1)异步复制

(2)半同步复制

(3)全同步复制

主从复制的配置步骤

主从复制的搭建

(1)初始化操作关闭防火墙

(2)设置时间同步

(3)修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf

(4)配置主从复制,在主服务器上做

(5)配置主从复制,在两个从服务器上做

(6)验证主从复制效果

读写分离

原理

作用


主从复制

        在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

主从复制的原理

就是基于二进制日志进行数据同步的。

主从复制的过程

主从复制有两个日志(二进制日志、中继日志)和三个线程(IO线程、DUMP线程、SQL线程

注:严格来说是四个线程,还有一个是ACK线程

①当主库发生数据更新时,会将写入操作记录到二进制日志中

②从库会探测到主库发生数据更新,并开启IO线程向主库请求二进制日志事件

③主库会为每个从库的IO线程的请求开启DUMP线程,并向从库发送二进制日志事件

④从库会接收主库发送的二进制日志事件并保存到自己的中继日志中

(在半同步模式下,从库会向主库反馈确认信息,主库会使用ACK收集线程接收从库反馈的确认信息)

⑤从库还会开启SQL线程读取中继日志,并在本地进行重放,从而实现主库和从库的数据一致

主从复制的分类

statement

基于语句的复制

执行效率高,占用空间小;无法保证在高并发高负载时候的精确度

row

基于行的复制

精确度高;执行效率低,占用空间大

mixed

混合类型的复制

默认采用基于语句的复制,一旦发现基于语句无法保证精确复制时,就会采用基于行的复制

主从复制的作用

  1. 实现读写分离
  2. 实现数据备份——跨主机热备份数据
  3. 实现高可用——作为数据库高可用的基础

主从复制的同步模式

(1)异步复制

主库在执行完客户端提交的事务后就会立即响应给客户端

(2)半同步复制

主库在执行完客户端提交的事务后,只要等待一个从库返回响应给主库,才会响应给客户端

(3)全同步复制

主库在执行完客户端提交的事务后,要等待所有从库返回都响应给主库,才会响应给客户端

主从复制的配置步骤

  1. 主从服务器先做时间同步
  2. 修改主从数据库的配置文件,主库开启二进制日志,从库开启中继日志
  3. 在主库创建主从复制的用户,并授予主从复制的权限
  4. 在从库使用 change master to 对接主库,并 start slave 开启同步
  5. 在从库使用 show slave status\G 查看 IO线程和 SQL线程的状态是否都为 YES

主从复制的搭建

Master   服务器:192.168.80.10        mysql5.7
Slave1   服务器:192.168.80.20        mysql5.7
Slave2   服务器:192.168.80.30        mysql5.7

(1)初始化操作关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config

(2)设置时间同步

vim /etc/chrony.conf
 
systemctl restart chronyd   #重启chronyd服务
 
timedatectl                 #检查时间是否同步

设定以master服务器时间为准,slave1 和 slave2 服务器都设为

(3)修改 Master、Slave1、Slave2 节点的 Mysql主配置文件/etc/my.cnf

vim /etc/my.cnf

Master:

server-id = 1              #每个服务器的id都要设置为不同的
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = 1
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

Slave:

#slave1的配置
server-id = 2
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = 1
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
 
#slave2的配置
server-id = 3
log_bin = mysql-bin
binlog_format = mixed
log-slave-updates = 1
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index

修改后全部重启mysql服务

systemctl restart mysqld

(4)配置主从复制,在主服务器上做

mysql -uroot -pabc123

grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123456';		#给从服务器授权
flush privileges;

show master status;

(5)配置主从复制,在两个从服务器上做

mysql -u root -pabc123

change master to master_host='192.168.80.10',master_port=3306,master_user='myslave',master_password='myslave123',master_log_file='mysql-bin.000001',master_log_pos=1241;
 
change master to master_host='192.168.80.10',master_port=3306,master_user='myslave',master_password='123456';

start slave;

show slave status\G

注意:一般 Slave_IO_Running: No 的可能性

  1. 网络不通
  2. my.cnf配置有问题
  3. 密码、file文件名、pos偏移量不对
  4. 防火墙没有关闭

(6)验证主从复制效果

create database mydb;

show databases;

读写分离

原理

在主库上处理事务性操作(写入操作),在从库上处理查询操作(读操作),再通过主从复制将主库上的数据同步给从库。

作用

通过读写分离可以分担数据库单节点的负载压力,提高数据库的读写性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值