查漏补缺(六):Mysql主从复制

Mysql的主从复制是通过binary-log(bin log)的二进制日志来实现的。流程是这样的:
因为Mysql主从模式是一种读写分离的模式嘛,所以当客户端在主服务器提交一个事务后,对应的操作会同步到binary log上,然后主服务器开启一个叫做log dump的线程,用来向从服务器发送这个binary log,还有一个binary position,用来指示这次复制的开始位置。从服务器会开启两个线程,一个是IO线程,用来接受主服务器传播过来的binary log,同时写在一个叫做relay log的中继日志中,还有一个线程是SQL线程,它的主要任务是对relay log进行解析,转化为对应的sql语句,然后逐条执行。以此来完成主从同步。
Mysql的主从复制模式有三种

  • 异步模式
  • 半同步模式
  • 全同步模式

异步模式是默认的模式,主服务器向从服务器发送binary log,它无需得到从服务器的确认,只要发送完了就直接返回,响应客户端。这种方法速度最快,但是主从复制出错的概率也最高,因为它没有任何确认机制。

半同步模式,主服务器向从服务器发送binary log,从服务器成功接受到之后,还需要发回一个确认信号,主服务器接受到确认信号之后,才会返回并响应客户端。如果等待一个超时时间还没有得到确认信号,那么主服务器会使用异步模式重新发送。这种方法进一步保障了主从复制的成功,但是牺牲了响应时间。并且也并不保证能复制成功,因为它只保证从服务器成功接受到binary log,而不保证从服务器能成功完成sql语句的执行

全同步模式,主服务器向从服务器发送binary log,从服务器接受到,并且执行完响应的命令并提交后,发送一个确认信号,主服务器接受到确认信号,然后响应客户端。这种方法可以保证主从复制的成功,但是严重牺牲了响应时间,所以用得比较少。

要想做到更高级别的数据一致性的话,可以考虑使用数据库中间件,当一个数据被更新之后,在一段时间内,对这个数据的读操作要落在主服务器上,因为这段时间主从可能还未完成同步,直接去从服务器读可能会造成主从不一致。这种方法虽然能保证高级别的数据一致性,但是破坏了读写分离的原则,加大主服务器的压力。具体就要结合场景进行舍取了。

发布了60 篇原创文章 · 获赞 7 · 访问量 3849

猜你喜欢

转载自blog.csdn.net/SCUTJAY/article/details/104957440