1.如何实现读写分离
搞一个主库用来写,挂多个从库,从库用来读,然后主库每次把记录更新到从库。
2.读写分离的原理
主库每次会写一个binlog日志,然后从库链接到主库以后,从库会有一个IO线程,将binlog日志拷贝到本地,写入到一个中继日志,然后从库中会有一个SQL线程去执行日志里面的内容,在本地执行一遍SQL,这样就保证了自己跟主库数据一致。但是整个过程是串行化的,所以主库同步到从库是存在延迟的。
3.mysql读写分离同步数据丢失问题(半同步复制semi-sync复制)
主库同步到副库过程中,当主库写完以后再写入binlog日志时,副库还没有同步,主库宕机了,就会导致数据丢失,解决的办法是使用半同步复制,所谓半同步复制就是指主库写入binlog日志以后,就会强制此时立刻同步给副库,当副库写入到自己本地的relaylog后,接着会返回给主库一个ack,主库接收到这个ack之后才会认为写操作完成了。
4.mysql读写分离数据延时问题(并行复制)
所谓并行复制,指的是从库开启多个线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。
show statu, Seconds_Behind_Master,你可以看到从库复制主库的数据落后了几ms,当落后过多时,可以把主库拆成多个主库。