1、Mysql主从复制
异步复制、半异步复制、同步复制
1.2、异步复制
*master : (执行sql语句) execute --- (二进制日志)binlog ---commit
*slave:(监听binlog) ----relaylog(中继日志) ---binlog ---commit
存在问题:master不知道slave是否接收成功,然后自己提交了,所以会有主从数据不一致问题;
主从不一致!
如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/fa350bfd61cb90b6a0595fbccd7fd866.png)
1.3、半异步复制
*master : (执行sql语句) execute --- (二进制日志)binlog --- commit(要确保slave接收到binlog才会提交)
*slave:(监听binlog) ----relaylog ---转成自己的binlog --- commit
存在问题:异步复制的主从数据不一致问题还没解决!确保slave接收到binlog后,数据已经同步到salve里面,但是如果master中途G了提交失败,但是日志依旧保存了,导致主从数据不一致!
下图示例:
![](https://i-blog.csdnimg.cn/blog_migrate/1330a020769fa10974d8e7f8272d10e2.png)
1.4、同步复制
*master : (执行sql语句) execute --- (二进制日志)binlog --- commit(要确保slave接收到binlog并且commit之后才会提交)
*slave:(监听binlog) ----relaylog(中继日志) ---转成自己的binlog --- commit
解决了异步和半异步的数据不一致问题,唯一就是安全性高了,延迟稍微长一些,数据吞吐量也少了.
下图示例:
![](https://i-blog.csdnimg.cn/blog_migrate/15f11e5564953787bade4cc7996333ab.png)
总结:总体来说,异步复制和半异步复制都有主从数据不一致的情况,同步复制解决了这个问题,但是会有更长的延迟,系统吞吐量也会被有所影响,会减少~