登录
首页 >  数据库 >  MySQL

Mysql主从复制

来源:SegmentFault

时间:2023-01-22 20:43:22 272浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《Mysql主从复制》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

为什么需要主从复制

1.在业务复杂的系统中,会出现各种锁竞争的情景,非常影响正在进行中的业务,使用主从复制,让主库负责写,从库负责读,保证了业务的正常运作。
2.做数据的热备。
3.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O的访问频率,提高单个机器的I/O性能。

什么是Mysql主从复制?

Mysql主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。

Mysql主从复制原理

image.png
原理:

1.master服务器将数据的改变记录进binlog日志;

2.slave服务器会在一定时间间隔内对master的binlog日志进行探测其是否发生改变,如果发生改变,slave会生成一个I/O线程去请求主库的binlog写到本地的relay-log(中继日志)中;

3.slave会生成一个sql线程,读取relay-log中的日志,并解析成sql语句逐一执行。

具体步骤:

1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave

2、从库的IO线程和主库的dump线程建立连接。

3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。

4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。

5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中

6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge

Mysql主从同步延时分析

1.Mysql的主从复制都是单线程操作,master的binlog日志是顺序写,效率很高,slave的sql Thread将主库的sql语句重放时,io操作是随机的,所以效率要低很多。
2.由于sql Thread也是单线程的,当master并发很高时,产生的DML语句数量超过了slave的sql Thread所能处理的速度,或者slave中有大型的query语句产生了锁等待,那么延时就产生了。

解决方案

1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。
4.不同业务的mysql物理上放在不同机器,分散压力。
5.使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。
6.使用更加强劲的硬件设备。

mysql5.7之后使用MTS并行复制技术,永久解决复制延时问题

今天带大家了解了MySQL、数据库的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表