MySQL主从复制与读写分离

一、主从复制
主从复制是读写分离和高可用MHA的前提。

1.1 主从复制的模式
MySQL的默认模式

异步模式:主库在更新完事务之后,会立即把结果返回给从服务器,但主库并不关心从库是否接受到、是否处理成功。

一旦出现网络问题或其他因素影响,容易导致同步失败。特点:效率高,不够安全。

2、全同步模式

主库在更新完事务之后,立即把结果返回到从库,所有的从库执行完毕之后才能继续下一个同步。

特点:安全,性能不高

3、半同步复制

介乎于异步和全同步之间。主库更新完事务之后,也是会同步到从库。同步提交之后有一个等待时间,这个等待时间是一个TCP/IP的往返时间,一般在5ms左右。

特点:一定程度上保证效率,一定程度上保证安全,即数据的完整性。
 1.2 主从复制的特点

  • 主从复制的常见架构模式,一般是奇数台:一主两从 或 两主三从 ;比较少见两主两从

  • 一般只有主库复制到从库,即主库的更新会同步到从库,但从库的数据更新不会同步到主。

  • 如果是主主模式,则主库之间互为主库,各自的更新会互相同步。

主从复制的延迟怎么解决?1、网络问题:防火墙原因;网络设备问题 2、硬件设备问题:CPU、内存、磁盘出现问题 3、配置文件问题。

1.3 主从复制的设置类型
1.3.1 双一设置:安全性设置

配置文件当中进行双一设置可以提高数据配置的一致性,提高数据的安全性。

前提:数据库的存储引擎要是InnoDB

双一设置可以提高安全性,但是对性能影响较大,适用于对数据安全性要求极高的场景。

1.3.2 性能化设置

解释:极端性能化,一旦系统重启、刷新等,会丢失日志

N为较大的数字,比如10,即最多提交几次事务会进行磁盘刷新,将日志内容保存到磁盘

解释:每次更新都保存在内存中,不进行刷新,不推荐设置

解释:控制InnoDB存储引擎缓冲池的大小,增大可以提高数据库的性能,但是占用的是系统内存,配置的时候要注意合理化使用

1.4 主从复制的实现

实现是基于mysql的二进制日志,根据主库的二进制文件的标志位,实现主和从的同步。主从服务器之间,服务器的时间要同步。

1.4.1 架构

主:mysql1 :20.0.0.41

从1:mysql2 :20.0.0.42

从2:mysql3 :20.0.0.43

1.4.2 配置流程
  1. 对三台mysql服务器统一配置如下

   2.对主库配置如下

 3.三台库上都创建用户myslave:

 4.在主库上查看主的状态,获取后面配置需要的信息

  5.对从库1配置如下:

  6.对从库2配置如下:

  7.两台从库mysql服务器同步操作

  • master_log_file 取决于主库的二进制日志文件具体是哪个,就是上面通过命令show master status;获取的File列下面的值
  • master_log_pos取决于上面通过命令show master status;获取的主库的二进制日志文件的position  8.启动同步,查看同步是否成功

  • Slave_IO_Running :检查从库和主库的IO通信是否正常
  • Slave_SQL_Runing :检查从库的SQL线程是否正常运行

在主从同步完成之前,需要先停止服务,一般是初始化的时候配置,防止因为其他操作,导致position的位置变化,导致同步失败。如果IO或SQL检查出现no,需要重置slave设置:

2.2 读写分离的实现
2.2.1 架构

主从服务器:

主:mysql1 :20.0.0.41

从1 :mysql2 :20.0.0.42

从2 :mysql3 :20.0.0.43

20.0.0.10 :test1:代理服务器 jdk1.6 Amoeba (需要准备jdk1.6版本的安装包,以及Amoeba的软件包)

20.0.0.20 :test2 : 客户端 mysql / mariadb

2.2.2 配置流程

基于上文配置完成的主从服务器,继续配置如下

  1. test1 和 test2 关闭防火墙、守护进程

      2、代理服务器test1上安装java环境

  1. 配置 Amoeba读写分离,两个 Slave 读负载均衡

    4.1) 先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问

    如果主从复制处于running,就不需要配置两台从库,在主库上建完用户,从库会自动复制

3.1 主从同步复制原理
(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线程将进入睡眠状态,
等待下一次被唤醒。
 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值