面试官:你们数据库有没有用到主从同步呢?
我:没有。
结束…
现在大多数公司数据库都是主从同步,读写分离的。今天就来总结一道面试高频题目:数据库主从同步的原理是什么?
主从复制原理:
上边这张交互图就清楚的标记出了Master节点如何同步到Slave节点
- 首先Master上的修改、删除、新增操作都会被记录到一个叫做binlog的文件中,它是一个二进制日志文件
- Slave通过I/O线程读取binlog文件并写入到自己的relaylog(中继日志)中
- 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog
- 另一个SQL线程会读取自身的relaylog文件,并把对应的操作在自己的节点上执行一次,达到同步的效果
主从虽好,同时也带来了问题:
-
主库宕机后,数据未同步完成,数据丢失
解决方式:
半同步复制 (确保事务提交后binlog至少传输到一个从库节点,性能有一定的降低,响应时间会更长)
强制走主 -
从库只有一个SQL Thread,主库写压力大,复制很可能延时
在SQL线程上实现了多线程,来提升slave的并发度