主从复制的过程是怎样的?读写分离有什么问题?
先自己想一想,再看参考要点
参考要点
- 主库把修改写入 binlog,由 binlog dump 线程发给从库
- 从库的 I/O 线程写入中继日志,SQL 线程读取并重放,8.0.27 起默认 4 个工作线程并行重放
- 读写分离的问题是默认异步复制带来的复制延迟,刚写完就读从库可能读到旧数据
- 写后的读和实时性要求高的读走主库,或者写入后记下 GTID,读从库前用 WAIT_FOR_EXECUTED_GTID_SET 等从库执行完,再在新开始的事务或快照中读取,超时就改读主库
- 监控延迟,延迟过大的从库暂停分配读请求
- 半同步复制只保证从库收到了 binlog,不保证已经执行,解决不了读到旧数据