MYSQL主从复制与读写分离

本文详细介绍了MySQL主从复制的工作原理,包括复制类型、功能、工作过程以及如何降低延迟。同时探讨了读写分离的概念、应用场景和与主从复制的区别。还提供了实际的实验步骤,展示了如何在环境中部署和配置MySQL的主从复制和读写分离功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前期准备

  准备至少三台虚拟机为主从复制与读写分离的实验做准备。

  • 主从复制:一台主设备,至少一台从设备
  • 读写分离:一台主设备,至少一台从设备,一台环境服务器

二、Mysql主从复制原理

  2.1 mysql的复制类型

  • 基于语句的复制
  • 基于行的复制
  • 混合类型的复制

  2.2 mysql主从复制的功能

    通过主从复制的方式来同步数据,而且mysql主从复制是对数据库中的数据、语句做备份

  2.3 mysql主从复制的工作过程

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

    中继日志:主要是存放修改的数据

  2.4 mysql主从复制延迟

  1. master服务器高并发,形成大量事务
  2. 网络延迟
  3. 主从硬件设备导致cpu主频、内存io、硬盘io
  4. 本来就不是同步复制、而是异步复制
  5. 从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
  6. 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
  7. 从库使用SSD磁盘
  8. 网络优化,避免跨机房实现同步

  2.5 主从复制实验

  2.5.1 在主设备安装ntp

  2.5.2 在从设备安装ntpdate 

  2.5.3 编辑配置,启动服务 

  2.5.4  查看当前时间

  2.5.5 从设备操作

    启动ntpd服务,跟主服务器同步时间,查看日期同时做个系统定时任务

  2.5.6 主设备操作

    编辑mysqld核心文件,重新启动服务并登陆mysql

  2.5.7 主设备操作(二)

    创建一个数据同步账号,刷新后查看master静态表

  2.5.8 从设备操作(二)

    编辑mysqld核心配置文件,重新启动mysqld服务

  2.5.9 从设备操作(三)

    登陆mysql,设置master各参数同时启动slave从服务器

  2.5.10 从设备操作(四)

    成功显示详细静态从服务器信息

  2.5.11 主设备操作(三)

    创建数据库ninini

  2.5.12 从设备操作(五)

    现实数据库,完成主从复制

三、MySQL读写分离原理

  3.1  读写分离的定义

  • 只在主服务器上写,只在从服务器上读

  • 主数据库处理事务性查询,从数据库处理select查询

  • 数据库复制用于将事务性查询的变更同步到集群中的从数据库

  • 读写分离方案

    • 基于程序代码内部实现

    • 基于中间代理层实现

    • MySQL-Proxy

    • Amoeba

  3.2 使用读写分离的原因

    因为数据库的“写”操作是比较耗时的,但是数据库的“读”操作就很便捷。所以读写分离,解决的是,数据库的写入,影响了查询的效率。

  3.3 读写分离的使用场景

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

  3.4 主从复制和读写分离的区别

    通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

  3.5 读写分离实验

  3.5.1 环境服务器操作(一)

    移动jdk和amoeba压缩包到opt下,切换到opt下,为jdk加权重,最后运行jdk

  3.5.2 环境服务器操作(二)

    回车到底端,输入yes待它解压完毕

  3.5.3 环境服务器操作(三)

    将jdk移动到local下并将它改名;编辑配置文件后运行配置文件;查看java版本;创建文件夹amoeba

   3.5.4 环境服务器操作(四)

    解压amoeba到刚创建好的文件夹下

  3.5.5 环境服务器操作(五)

    显示amoeba下的内容,为amoeda增加权限,执行配置文件

  3.5.6 环境服务器操作(六)

    切换到amoeda文件下,进入conf下,将amoeda复制一份后编辑amoeda

  3.5.7 环境服务器操作(七)

    编辑dbServers

  3.5.8 环境服务器操作(八)

    在后台运行amoeba

   3.5.9 环境服务器操作(九)

  3.5.10  环境服务器操作(十)

  3.5.11 环境服务器操作(十一)

   3.5.12 主表上操作(一)

    创建test表

  3.5.13  主表上操作(二)

    插值,删除id为2的表

   3.5.14 从表上操作 

    插值显示表格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值