mysql
主从同步分三种模式:异步复制
、半同步复制
、全同步复制
,今天记录下三种同步模式的概念、优势、劣势。
中继日志存在于
slave(从数据库)
中,它是从master(主数据库)
的二进制日志
复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。
看下图:
异步复制是 mysql
默认的同步方式,在 master
为 slave
开通账号密码、ip授权之后,slave
可以从 master
进行数据同步,主要依赖的是 master
的 binlog
日志。
slave
会启动两个线程,IO Thread
和 SQL Thread
:
IO Thread
负责从 master
拉取 binlog
日志,并写入 relay
中继日志SQL Thread
负责将 relay
中继日志中的变更进行重放,更新数据来达到跟 master
保持数据一致的目的这个过程中,
slave
通过IO线程拉取binlog
,master
无需关注是否有slave
需要同步,只做自己的事情,整个复制过程都是异步完成的,这个就是异步复制。
异步复制的优势是性能好,缺点是数据的安全性比较差
在某一刻主从之间的数据差异可能较大,主机挂掉之后从机接管,可能会丢失一部分数据。
看下图:
master
更新操作写入 binlog
之后会主动通知 slave
,slave
接收到之后写入 relay log
即可应答,master
**只要收到至少一个**ack
**应答,则会提交事务**。
可以发现,相比较于 异步复制
,半同步复制
需要依赖至少一个 slave
将 binlog
写入 relay log
才行,在性能上有所降低,但是可以保证至少有一个 slave(从数据库)
跟 master(主数据库)
的数据是一致的,数据的安全性提高。
对于数据一致性要求高的场景,可以采用半同步复制的同步策略,比如主库挂掉时,准备接管的那一个从库,对数据的一致性要求很比较高。
半同步复制的优点是数据的安全性好,缺点是性能比异步复制稍低
全同步复制
跟 半同步复制
的区别是,全同步复制
必须收到所有 slave(从数据库)
的 ack
,才会提交事务。
master(主数据库)
的事务提交依赖于后面所有的 slave(从数据库)
,这样一来性能就会明显得下降,除非是对所有 slave(从数据库)
数据一致性要求非常高的场景,否则我们一般不采用这种策略。
全同步复制的数据一致性最好,但是性能也是最差的
如果您对本文有任何疑问或需要帮助,请在评论区留言,我会尽力解答。如果本文对您有帮助,请给个赞以示支持,非常感谢!💗
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。