浅析Mysql主从复制

2019-10-14  本文已影响0人  封心_SH

我们先从什么是主从复制说起。

什么是主从复制

简单来说,就是创建一个和主数据库一样的数据库,称为从数据库,从数据库同步主数据库中的数据,两者完整且独立。

为什么要主从复制

在业务比较简单的系统中,一台服务器基本能完成日常需求。但很多时候,系统和用户的规模都比较大,大量请求如果都集中在一台MySQL服务器上,磁盘I/O的频率较高,导致系统的性能急剧下降。

使用主从复制,让主(master)数据库写,从(slave)数据库读,即读写分离,这样slave可以分担master的压力,降低单台机器的I/O频率,提升系统的性能。

另外,slave同步master的数据,一旦master因故障宕机,slave可以临时替代master的位置,降低系统瘫痪的风险。


怎样进行主从复制

在介绍主从复制原理之前,先了解一下MySQL的binlog文件。

binlog是MySQL中一个二进制日志文件,专门用于记录除了select和show之外的任何使数据发生变化的sql语句,如create、alter、insert、delete等。一旦服务器启动,binlog文件就会进行记录。

主从复制分以下几个步骤:

①主库的更新操作被记录到binlog文件中;

②从库连接主库;

③主库开启binlog dump线程,将binlog文件内容传输到从库;

④从库创建I/O线程,将主库的binlog内容存进relay log文件中;

⑤从库同时又创建一个SQL进程,读取并执行relay log文件中的更新操作,并将更新内容写入从库。

可以看到,在主从复制的整个流程中,主库开启了一个线程,从库开启了两个线程。

但是请注意,主从复制是一个异步过程,所以并不是按照上述这个步骤逐步进行的。
下面是主从复制的原理图:


MySQL主从复制确实能带来很多好处,但是也伴随着一个常见问题:从库读延迟怎么办?
可能有读者不太理解这个问题是什么意思,我们详细说下。

slave开启SQL线程执行binlog中的更新操作(DDL和DML)时,DDL和DML的执行是随机的,且是单线程的(master可以并发),那么就有可能在与其它查询语句争夺时“卡住”,后面的语句就需要等它执行完才能执行,这样就造成延迟,降低了主从库的数据一致性和实时性。

相应地也有一些解决办法,如关闭从库的binlog,更换更好的从库硬件设备等,具体问题具体对待,且笔者在此方面并无经验,就不展开了。

以上是对MySQL主从复制做的一个浅析,其实还有很多问题等待解决,欢迎各位深入学习。

———— / END / ————



上一篇 下一篇

猜你喜欢

热点阅读