主从复制是什么
将一个主库的数据复制到一个或多个作为从节点的库
为什么需要主从复制
- 架构扩展。业务量增大的时候,单机IO称为瓶颈,会通过从节点分担读压力来降低单机磁盘的IO
- 数据热备。作为后备数据库,发生问题可切换
- 读写分离。支撑更大并发,有些统计操作可以放到Slave节点
原理是什么
日志文件binlog:binlog是主库保存更新日志的二进制文件
三个线程:
- 主节点binary log dump线程
当有从库连接主库的时候,主库会创建一个binary log dump线程发送binlog内容到从库。
- 从节点I/O线程
从节点执行 start slave命令之后,从节点创建一个I/O线程用来连接主节点,请求主库中更新的binlog。I/O 线程接收到主节点binlog dump 进程发过来的更新之后,保存到本地的relay log中。
- 从节点SQL线程
SQL线程负责解析relay log中的内容,解析成具体的操作并执行,最终保证数据一致性
常见延迟问题及解决方案
- 主库的从库太多,导致复制延迟
从库数量控制在3-5个
- 从库硬件比主库差
- 慢SQL语句过多
比如一条SQL的执行时间是20s,那么在从库执行完毕到能查询到至少20s,那么主从延迟就20s了
- 主从复制的设计问题
主从复制单线程,如果主库并发写太大,来不及传到从库,就会导致延迟
- 主从库之间的网络延迟 主从库的网卡、网线、交换机、跨公网的主从复制都会导致主从延迟