读写分离、主从同步一文搞定

主从复制:是一种数据备份的方案。

MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL.默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

是在有从数据库的情况下使用,当主数据库进行对数据的增删改也就是写操作时,将查询的任务交给从数据库。

为什么要使用主从复制操作?

1、这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样。即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2、做数据的热备,防止主机数据炸掉

3、架构的扩展。业务量越来越大,IO访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

复制的原理:

在这里插入图片描述

这里的binlog非常重要,binlog相当于一个预写日志的东西,什么意思?
主服务器每次进行增删改的时候,他会把操作记录在日志里面,记录的操作会保存在磁盘目录里面。每过一段时间定时查询,如果有改变的话,此时从服务器抛出一个i/oThread线程进行同步。请求master二进制时间,把日志数据拉回来,并将操作保存到本地的中继日志中。没完!!!从节点将从中继日志中读取二进制日志,在本地重放,保证数据和主节点一致,最后i/oThread和sqlThread进入休眠状态,等待被唤醒。

注意点!!!!

1–master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog—进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。

2–slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。

3–Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

4–Mysql复制最好确保master和slave服务器上的Mysql版本相同
(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)

5–master和slave两节点间时间需同步

主从形式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
因为读的操作多,所以主写从读

在这里插入图片描述
因为写的操作多,所以主读从写

在这里插入图片描述
这个主要是为了数据的备份,同时覆盖读请求的压力


复制的不同步(包含延时)怎么解决??

1、网络的延迟
由于mysql主从复制是基于binlog的一种异步复制通过网络传送binlog文件,理所当然网络延迟是主从不同步的绝大多数的原因,特别是跨机房的数据同步出现这种几率非常的大,所以做读写分离,注意从业务层进行前期设计。

2、主从两台机器的负载不一致
由于mysql主从复制是主数据库上面启动1个io线程,而从上面启动1个sql线程和1个io线程,当中任何一台机器的负载很高,忙不过来,导致其中的任何一个线程出现资源不足,都将出现主从不一致的情况。

3、max_allowed_packet设置不一致
主数据库上面设置的max_allowed_packet比从数据库大,当一个大的sql语句,能在主数据库上面执行完毕,从数据库上面设置过小,无法执行,导致的主从不一致。

4、自增键不一致
key自增键开始的键值跟自增步长设置不一致引起的主从不一致。

5、同步参数设置问题
mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog文件出现损坏,导致主从不一致。

6、自身bug
mysql本身的bug引起的主从不同步

7、版本不一致
特别是高版本是主,低版本为从的情况下,主数据库上面支持的功能,从数据库上面不支持该功能。

解决办法:

1.操作方面:
1、忽略错误后,继续同步

2.架构方面

1.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

2.不同业务的mysql物理上放在不同机器,分散压力。

3.硬件方面

1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。

2.存储用ssd或者盘阵或者san,提升随机写的性能。

3.主从间保证处在同一个交换机下面,并且是万兆环境。

4.机制方面

MySQL 实际上在有两个同步机制,一个是半同步复制,用来 解决主库数据丢失问题;一个是并行复制,用来 解决主从同步延时问题。

1.半同步复制,也叫 semi-sync 复制,指的就是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后才会认为写操作完成了。

2.并行复制,指的是从库开启多个线程,并行读取 relay log 中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。

用途
●实时灾备,用于故障切换
●读写分离,提供查询服务
●备份,避免影响业务


读写分离:是一种让数据库更稳定的的使用数据库的方法。

读写分离是依托于主从复制的

在这里插入图片描述
所有的请求都请求mysql-proxy,里面会有lua这个东西,脚本可以识别是读请求还是写请求,如果是读请求,发给读机器,如果是写请求,发给写机器

读写分离
1、避免从数据库进行写操作而导致的主从数据库数据不一致的情况,因为当主从数据库数据不一致时,那么从数据库最主要的备份任务就没有意义了。

2、减轻主数据库的压力。因为进行写操作更耗时,所以如果不进行读写分离的话,写操作将会影响到读操作的效率。

为什么读写分离可以提高性能

1、物理服务器增加,机器处理能力提升。拿硬件换性能
2、主从只负责各自的读和写,极大程度缓解X锁和S锁争用
3、slave可以配置myiasm引擎,提升查询性能以及节约系统开销
4、master直接写是并发的,slave通过主库发送来的binlog恢复数据是异步
5、slave可以单独设置一些参数来提升其读的性能
6、增加冗余,提高可用性

MySQL读写分离基本原理是让master数据库处理写操作,slave数据库处理读操作。master将写操作的变更同步到各个slave节点。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值