**
MySQL-主从复制(一)
**
如何实MySQL的读写分离?
MySQL主从复制的原理是啥?
如何解决MySQL主从同步的延时问题?
从面试官的心里分析
高并发这个阶段 肯定需要做读写分离 在大多网站上其实是读多写少 针对这个情况
解决方案 写一个主库 但是主库挂多个从库 然后从多个从库读 这样解决高并发压力问题
MySQL是如何读写分离?
基于主从复制架构 简单的说 搞一个主库 挂多个从库 然后单单只是写主库 主库会自动把数据同步到从库上去
MySQL主从复制的原理
大白话: 主库写入binlog日志 然后从库通过链接主库 从库有一个io线程 将主库binlog日志拷贝到自己本地 然后 从库有一个sql线程从日志中读取内容 然后执行binlog日志中的内容 也就是在执行一遍sql 这样就保证根主库的数据一样
有一个问题 从库同步主库过程是串行化的 意思是说 主库上并行操作在从库上是串行执行的 从库从主库拷贝binlog日志是串行执行sql 在高并发的情况下 从库数据一并比主库慢 有延时的 会经常出现 刚写入主库的数据可能读不到 要几十毫秒或者几百毫秒
一个问题 如果主库突然宕机 然后数据恰好没有同步到从库 可能从库上没有数据 导致数据可能丢失
解决方案 :
MySQL有两个机制:
半同步复制 解决主库数据丢失问题
主库写入到binlog日志后 强制把数据同步到从库 从库把日志写入自己本地log之后 会返回一个ack 给主库 主库接收到从库ack才会操作完成
并行复制 解决主从同步延时问题
从库开启多个线程 并行读取binlog 不同的日志 并行重放不同库的日志 这是库级别的并行
MySQL主从同步延时问题
主从复制延时大概在小几十毫秒 每天总有那么一些数据 我们期望更新一些重要的数据状态 但在高分期时候却发现没有更新
如果主从延迟较为严重 解决方案
分库 将一个主库 拆分为多个主库 每个主库写并发就减少了
如果确实存在必须插入立马要求查询到 然后立马就要返回过来执行一些的操作 设置直连主库 不推荐 (读写分离的意义就没了)