MySQL主从复制与读写分离

本文详细介绍了MySQL的主从复制和读写分离,包括读写分离的原理、何时需要实施、主从复制的类型和工作过程。通过实际操作展示了如何搭建MySQL主从复制,探讨了半同步复制模式,并提出了Amoeba作为读写分离的一种解决方案。
摘要由CSDN通过智能技术生成

目录

读写分离

读写分离概述

为什么要读写分离呢

什么时候要读写分离

主从复制与读写分离

mysql支持的复制类型

主从复制的工作过程

实际操作

初始环境

初始环境准备

搭建mysql主从复制

主服务器设置(搭建时间同步)

​编辑​编辑​编辑

从服务器设置(搭建时间同步)

​编辑​编辑​编辑

​编辑

主服务器的mysql配置

​编辑​编辑​编辑

​编辑

从服务器的mysql配置(两个操作相同)

​编辑​编辑​编辑

​编辑

验证主从同步

MySQL主从复制延迟

MySQL主从复制的几个同步模式:

半同步状态

MySQL读写分离原理

目前较为常见的MySQL读写分离分为以下两种:

1)基于程序代码内部实现

2)基于中间代理层实现

搭建Amoeba 实现读写分离

安装 Java环境:

​编辑​编辑​编辑

​编辑​编辑​编辑​编辑

配置amoeba

​编辑​编辑​编辑

​编辑​编辑​编辑

在客户端测试


读写分离

读写分离概述

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操饰.数据库复制被用来 把事务性操作导致的变更同步到集群中的从数据库.

为什么要读写分离呢

  • 因为数据库的"写"(写10000条数据可能要3分钟)操作是比较耗时的.

  • 但是数据库的"读"(读10000条数据可能只要5秒钟).

  • 所以读写分离,解决的是,数据库的写入,影响了查询的效率.

什么时候要读写分离

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用.利用数据库主从同步,再通过读写分离可以分担数 据库压力,提高性能.

主从复制与读写分离

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

mysql支持的复制类型

(1)STATEMENT:基于语句的复制.在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高. (2)ROW:基于行的复制.把改变的内容复制过去,而不是把命令在从服务器上执行一遍. (3)MIXED:混合类型的复制.默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制.

MySQL的复制类型 ·基于语句的复制(STATEMENT,MySQL默认类型) ·基于行的复制(ROW) ·混合类型的复制(MIXED) ·MySQL主从复制的工作过程

主从复制的工作过程

保证主节点开启二进制日志文件,从节点开启中继日志文件

1.数据更新时,写入二进制日志文件当中

2.从节点发现主节点二进制日志文件更新时,通过io线程请求二进制事件

3.主节点会启动dump线程,向其发送二进制事件

4.保存到从节点的中继日志中

5.从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致

注:

中继日志通常会位于os缓存中,所以中继日志的开销很小. 复制过程有一个很重要的限制,即复制在Slave上是串行化的,也就是说Master上的并行更新操作不能在Slave上并行操作.

实际操作

初始环境

master 服务器:192.168.217.120

slave1 服务器:192.168.217.130

slave2 服务器:192.168.217.140

初始环境准备

systemctl stop firewalld

setenforce 0

搭建mysql主从复制

主服务器设置(搭建时间同步)

yum install ntp -y            #安装时间同步服务器
​
vim /etc/ntp.conf             #修改配置文件
--末尾添加-
server 127.127.217.0          #设置本地是时钟源,注意修改网段
fudge 127.127.217.0 stratum 8 #设置时间层级为8(限制在15内)
service ntpd start            #开启服务

从服务器设置(搭建时间同步)

yum install ntp ntpdate -y          #安装时间同步服务器、同步服务 
​
service ntpd start
/usr/sbin/ntpdate 192.168.217.130   #进行时间同步
​
crontab -e                          #计划定时任务 
*/30 * * * * /usr/sbin/ntpdate 192.168.80.130

主服务器的mysql配置

vim /etc/my.cnf
server-id=1
log-bin=mysql-bin          #添加,主服务器开启二进制日志
binlog_format =MIXED       #二进制日志格式 
log-slave-updates=true     #添加,允许slave从master复制数据时可以写入到自己的二进制日志
expire_logs_days = 7       #设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M       #设置二进制日志限制大小,如果超出给定值,日志就会发生滚动,默认值是1GB
​
systemctl restart mysqld
​
mysql -u root -p123123
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.217.%' IDENTIFIED BY '123123'; #给从服务器授权
FLUSH PRIVILEGES;                   #刷新权限
show master status;                 #查询二进制文件

从服务器的mysql配置(两个操作相同)

vim /etc/my.cnf
server-id = 2                       #修改,注意id与Master的不同,两个slave的id也要不同
relay-log = relay-log-bin      #添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index = slave-relay-bin.index      #添加,定义中继日志文件的位置和名称,一般和r
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值