为什么需要主从
- 当一台数据库失效时,马上可以切换到另一台数据,保证业务连续;
- 其中一台只接受写操作,另一台接受读操作,减轻压力,提高并发;
- 通过对主库进行数据备份,确保数据不丢失。
如何实现主从同步
通常,我们在主数据库上进行only read操作,在从数据库上进行only write操作。 那当一个数据在主库上进行更新之后,如何在从库上读到最新的数据就是一个关键的问题。
从同步流程来看,有以下三种:
1.同步复制 > 主库写成功后,立刻同步,从库写成功后再返回结果
2.异步复制 > 主库成功后,返回结果,数据放在buffer中
3.半同步复制 > 主库写成功后,将数据发送给从苦,然后立即返回结果,而不管从苦是否写成功
从同步方式来看,有以下或更多种:
- 基于WAL
使用共享存储,如SAN存储,一台机器失败后,把SAN存储输出的磁盘挂到另一台机器上,然后把磁盘上的文件系统挂起来后完成切换
- Change发生时:
- 先将变更后内容记入WAL Buffer
- 再将更新后的数据写入Data Buffer
- Commit发生时:
- WAL Buffer刷新到Disk
- Data Buffer写磁盘推迟
- Checkpoint发生时:
- 将所有Data Buffer刷新到磁盘
- Change发生时:
- 基于触发器
使用触发器记录数据变化,然后同步到另一台数据库上。
- 基于语句复制
用户不直接连接到底层数据库,而是连接到一个中间件,中间件把数据库的变更发送到底层多台数据库上,从而完成数据的同步。