(三)MySQL读写分离的原理及主从同步延时解决方案

MySQL读写分离的原理

1、主服务器配置Binlog,将改变记录到二进制文件(binary log).

2、从服务器配置RelayLog.Slave将master的binary log events拷贝到它的中继日志(relay log)。

3、在主服务器授权Slave账户,从服务器有权读取主服务器的Binlog。

4、Slave重做中继日志的事件,将改变应用到自己的数据库中。Mysql复制是异步且串行化的。

主库上并行的操作,在从库上会串行执行。所以这就是一个非常重要的点了,由于从库从主库拷贝日志以及串行执行 SQL 的特点,在高并发场景下,从库的数据一定会比主库慢一些,是有延时的

主库突然宕机数据丢失问题

如果主库突然宕机,然后恰好数据还没同步到从库,那么有些数据可能在从库上是没有的,有些数据可能就丢失。

半同步复制,用来解决主库数据丢失问题

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

 MySQL 支持的并行复制

MySQL5.5的备库复制都是单线程apply,备库有两个线程与复制相关:io_thread 负责从主库拿binlog并写到relaylog, sql_thread 负责读relaylog并执行。多线程的思路就是把sql_thread 变成分发线程,然后由一组worker_thread来负责执行。

 

MySQL 5.6版本支持所谓的并行复制,但是其并行只是基于schema的,也就是基于库的。如果用户的MySQL数据库实例中存在多个schema,对于从机复制的速度的确可以有比较大的帮助。

 

MySQL 5.7“模拟主库并发”,基于组提交的并行复制,slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并行回放

  • DATABASE:默认值,基于库的并行复制方式
  • LOGICAL_CLOCK:基于组提交的并行复制方式

参考文章:https://www.cnblogs.com/xiaotengyi/p/5532191.html

主从同步延时排查方法

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

主从同步延时解决方案

1、主服务器要负责更新操作, 对安全性的要求比从服务器高, 比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog, innodb_flush_log_at_trx_commit 也 可以设置为0来提高sql的执行效率 。

2、使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器,只作为备份用,不进行其他任何操作
 

 

binlog有三种格式:Statement, Row和Mixed

  • 基于SQL语句的复制(statement-based replication, SBR)
  • 基于行的复制(row-based replication, RBR)
  • 混合模式复制(mixed-based replication, MBR)

基于SQL复制

优点:

产生的 binlog 文件较小;
binlog中包含了所有数据库修改信息,可以据此来审核数据库的安全等情况;

缺点:

须要执行全表扫描 (WHERE 语句中没有运用到索引) 的 UPDATE 时,须要比 row 请求更多的行级锁;
对于有 AUTO_INCREMENT 字段的 InnoDB 表而言,INSERT 语句会阻塞其他 INSERT 语句;

这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id()。
 

基于Row 复制

优点:
任何情况都可以被复制,这对复制来说是最安全可靠的;

缺点:

生成的 binlog 日志体积大了很多;
复杂的回滚时 binlog 中会包含大量的数据;、

 

混合模式复制

表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值