主从数据库介绍
1. 主从分工 :主负责写操作负载,一切写操作都在主上执行,读操作则分摊到从上执行。在写操作的时候会触发大量的行锁,表锁,块锁,都是降低系统执行效率的事情,所以采用读写分离,把写操作都集中到主上,从而提高读的效率,也是提供系统的高可用性
2. 用途:1、实时灾备,用于故障切换,2、读写分离,提高查询能力,3、备份,数据备份
2. 基本过程:1、主将数据的改变记入二进制 binlog 日志,2、从每隔一段时间对主的二进制进行探测是否发生改变,如果发生改变,则开始一个 I/O 请求主的二进制日志,3、 同时主节点为每个 I/O 线程启动一个 dump 线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动 SQL 线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后 I/O 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒。
主从复制延时分析
主从复制延时,影响主从数据一致性
主库 DML 请求频繁: 主库短时间内产生大量 binlog ,这些操作需要全部同步到从库,并且执行,因此产生了主从数据复制延时,也就是业务高峰期主库写入数据是并发写入的,而从库 SQL 线程为单线程回放 binlog 日志,很容易产生 relaylog 中继日志堆积,产生延时(当然为什么主写 binlog 就快,而从执行 binlog 慢呢,原因自然是虽然主是并发写入的,但 binlog 日志是顺序写的,所以产生 binlog 日志更快,而从读到的 binlog 日志是当时在主上并发操作时的记录,并不按照顺序,也就是两条日志操作的内存空间可能相差很远)。所以解决方案一边是提高 binlog 写入时的并行度,尽量内存操作是相邻的,从而提升回放 binlog 的性能。
主库执行大事务: 主库执行一条时间很长的事务,从库在记录时几乎也要花费很长的时间,从而使得从库后面的跟新操作堆积。解决方案自然是拆分大事务,这样能够及时提交,减小延时。
等等一些原因使得从库更新跟不上出库,从而出现延时更新