mysql的主从复制与读写分离

本文详细介绍了MySQL的主从复制原理,包括复制类型及工作过程,并通过实验部署展示了如何设置主从服务器。接着,探讨了读写分离的原理和常见实现方式,最后分享了基于Amoeba的读写分离实验部署,以及可能出现的主从复制延迟问题。
摘要由CSDN通过智能技术生成

目录

一. MySQL 主从复制原理

1.1 MySQL 支持的复制类型

1.2 MySQL主从复制的工作过程

二、主从复制实验部署

2.1、实验环境

2.2、mysql主从服务器时间同步

主服务器(192.168.80.11)

从服务器(192.168.80.12/13)

2.3、主服务器的mysql配置(192.168.80.11)

2.4、从服务器的mysql配置(192.168.80.12/13)

2.5、验证实验

三、mysql读写分离

3.1、mysql读写分离原理

3.2、目前较为常见的两种mysql两种读写分离方式

基于程序代码内部实现

基于中间代理层实现

四、读写分离实验部署

4.1、实验环境

4.2、Amoeba服务器配置(192.168.80.14)

安装java环境

安装Amoeba软件

配置Amoeba读写分离,所有节点开放amoeba权限

amoeba服务器上配置amoeba服务

客户端测试(192.168.80.15)

4.4、主从复制慢(延迟)可能性


一. MySQL 主从复制原理

MySQL 的主从复制和 MySQL 的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。

1.1 MySQL 支持的复制类型

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

1.2 MySQL主从复制的工作过程

Master 服务器保存记录到二进制日志
在每个事务更新数据完成之前,Master 服务器在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master 服务器通知存储引擎提交事务。
Slave 服务器复制 Master 服务器的日志
Slave 服务器将 Master 服务器的二进制日志复制到其中继日志(Relay log)。
首先 Slave 服务器开始一个工作线程(I/O),I/O线程在 Master 服务器上打开一个普通的连接,然后开始 Binlog dump process。
Binlog dump process 从 Master 服务器的二进制日志中读取事件,如果 Slave 服务器已经跟上 Master 服务器,它会睡眠并等待 Master 服务器产生新的事件,I/O线程将这些事件写入中继日志。
Slave 服务器重放复制过来的日志
SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新 Slave 服务器的数据,使其与 Master 服务器中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
注意: 复制过程有一个很重要的限制,即复制在 Slave 服务器上是串行化的,也就是说 Master 服务器上的并行更新操作不能在 Slave 服务器上并行操作。

二、主从复制实验部署

2.1、实验环境

  • master 服务器:192.168.80.11
  • slave1 服务器:192.168.80.12
  • slave2 服务器:192.168.80.13

2.2、mysql主从服务器时间同步

主服务器(192.168.80.11)

systemctl stop firewalld
setenforce 0

yum -y install ntp

vim /etc/ntp.conf
#末尾添加
server 127.127.80.0		#设置本地是时钟源,注意修改网段
fudge 127.127.80.0 stratum 8 	#设置时间层级为8(限制在15内)

service ntpd start

从服务器(192.168.80.12/13)

systemctl stop firewalld
setenforce 0

yum -y install ntp ntpdate
systemctl start ntpd

/usr/sbin/ntpdate 192.168.80.11   #进行时间同步

crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.80.11	#指定周期化任务定期同步时间

2.3、主服务器的mysql配置(192.168.80.11)

vim /etc/my.cnf
server-id=1
log-bin=master-bin		#添加,主服务器开启二进制日志
binlog_format=
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值