MySQL主从复制与读写分离

本文详细介绍了MySQL的主从复制理解,包括复制类型、工作流程、架构及延迟原因与优化。同时,讲解了搭建MySQL主从复制的步骤,强调了时间同步的重要性。在读写分离部分,讨论了其原理、常见问题和解决方案,特别是通过amoeba实现读写分离的过程。文章总结了主从复制的监控和排查方法,以及对版本不一致的处理建议。
摘要由CSDN通过智能技术生成

目录

前言

一、MySQL主从复制的理解

1、MySQL的复制类型

2、MySQL主从复制的工作流程

3、MySQL架构(一主多备)

3.1 一主多备 

3.2 M-S-S

3.3 M-M/双主互备 (互为主从)

3.4 M-M-M

4、MySQL主从复制延迟原因

5、MySQL主从复制延迟的优化

二、搭建MySQL主从复制

1、配置主从服务器时间同步

1.1 主服务器时间同步配置

1.2 从服务器时间同步配置

2、mysql配置文件配置

2.1 主服务器配置

2.2 从服务器配置

3、验证

三、对于读写分离的三个问题

1、什么是读写分离?

2、为什么要读写分离?

3、什么时候要读写分离?

4、主从复制与读写分离

5、mysql支持的复制类型

6、主从复制的的工作过程

7、MySQL读写分离原理

8、目前较为常见的MySQL读写分离

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

(2) 居于中间代理层实现

四、使用amoeba 搭建mysql读写分离

1、安装JAVA环境

2、安装amoeba软件

3、配置读写分离

3.1  主从mysql 开发权限给amoeba

3.2 amoeba 服务器修改/amoeba配置文件

3、修改数据库配置文件

4、启动amoeba,并进行测试

4.1 启动amoeba

4.2 客户端连接测试 

五、总结

1、读写分离使用的是什么方式?

2、如何查看主从同步状态是否成功

3、如果I/O不是yes呢,你如何排查?

4、show slave status能看到哪些消息(比较重要)

5、主从复制慢(延迟)会有哪些可能?怎么解决?

6、若主从版本不一致


前言

  • 在企业应用中,成熟的业务通常数据量都比较大
  • 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求
  • 配置多台主从数据库服务器以实现读写分离

横向扩展:集群化,压力分摊

一、MySQL主从复制的理解

1、MySQL的复制类型

  • statement:基于语句的复制。在主服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高
  • row: 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍
  • mixed:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

数据一般放在二进制日志文件中

2、MySQL主从复制的工作流程

  1. master 节点将数据的改变记录成二进制日志(bin log),当master上的数据发生改变时,则将其改变写入二进制日志中。
  2. slave节点会在一定时间间隔内对master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求
  3. 同时master节点为每个I/O 线程启动一个dump线程,用于向其发送二进制事件,并保存值slave节点本地的中继日志(relay log)中,slave节点将启动sql线程从中继日志中读取二进制日志,在本地重放,即解析成sql语句逐一执行,使得其数据和master节点的保持一致,最后,I/O线程和sql线程进入睡眠状态,等待下一次被唤醒。

3、MySQL架构(一主多备)

3.1 一主多备 

         一般用来做读写分离的master 写 其他 salve 读这种架构最大问I/O 压力集在master 上 多台同步影响IO

3.2 M-S-S

中继:分担master压力,slave中继需要开启bin-log并配置log-savle-update

总结:slave中继可以使用black-hole存储引擎,不会把数据存储到磁盘,值记录在二进制日志

3.3 M-M/双主互备 (互为主从)

(很多人误以为这样可以做到mysql负载均衡,实际没什么好处,每个服务器需要同样的同步更新,破坏了事务隔离性和数据一致性)

3.4 M-M-M

监控三台机器互相做对方master

天生的缺陷:复制延迟,salve上同步要慢于master,如果大并发的情况那么延迟更严重mysql5.6 已经自身可以实现fail over故障切换

4、MySQL主从复制延迟原因

  • master服务器高并发,形成大量事务
  • 网络延迟
  • 主从硬件设备导致(cpu主频、内存io、硬盘io)
  • 本来就不是同步复制、而是异步复制

5、MySQL主从复制延迟的优化

  • 从库优化Mysql参数。比如增大innodb buffer pool size,让更多操作在Mysql内存中完成,减少磁盘操作。
  • 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
  • 从库使用SSD磁盘
  • 网络优化,避免跨机房实现同步

二、搭建MySQL主从复制

  • master:192.168.157.10 mysq5.7
  • slave 1:192.168.157.45 mysql5.7
  • slave 2:192.168.157.55 mysql5.7
  • 客户端:192.168.157.65 mysql
  • 关闭服务器的 firewalld和selinux设置

1、配置主从服务器时间同步

配置时间同步,可以使用chrony ,也可以使用ntp,但是两者只能使用其一

1.1 主服务器时间同步配置

yum -y install ntp
vim /etc/ntp.conf
#在文件末尾添加
server 127.127.157.0  #设置时间源为本地
fudge 127.127.157.0 stratum 8  #设置时间层级(15以内)

#启动ntpd服务
service ntpd start 
#查看udp123端口
netstat -naup | grep :123

1.2 从服务器时间同步配置

yum -y install ntp
 service  ntpd start 
 #进行时间同步,同步主服务器的时间
 /usr/sbin/ntpdate  192.168.23.10
 
 #配置周期性同步时间
 crontab -e 
 */30 * * * * /usr/sbin/ntpdate 192.168.23.103

2、mysql配置文件配置

2.1 主服务器配置

 systemctl stop firewalld
 setenforce 0


vim /etc/my.cnf
.....
server-id = 10          #配置server id,集群内mysql服务器server -id不可以重复
log-bin=mysql-bin        #主服务器开启二进制日志
binlog_format=mixed      #使用混合模式
log-slave-updates=true    #允许从服务器更新二进制日hi

#重启mysql服务
systemctl restart mysqld
#进入数据库
mysql -uroot -123456

#刷新二进制日志
flush logs;  

#创建主从复制授权用户
grant  replication slave on *.* to 'myslave'@'192.168.157.%'  identified by '123456';

#查看当前 二进制日志名file和偏移量position
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值