MySQL 主从架构原理
主从概念
指的是 Mysql 主库数据发生变更时,会同步更新到从库
主从好处
保证高可用、水平扩展、读写分离、数据备份
主从原理
binlog
记录数据库的写入操作,以二进制的形式保存在日志文件;
3 种形式:
statement: 记录每一条 sql 语句;
row: 记录每一条数据的变更;
mixed: statement 和 row 的混合,mysql 决定什么场景用 statement,什么场景用 row;
relay log
Slave 接收 Master 的同步日志,会先放到中继日志 relay log 里;
slave 的读操作也会基于 relay log;
主要是将 IO 线程和 SQL 解析线程解耦;
同步过程
Slave 连接到 Master;
Master 开启 binlog dump 线程;
Dump 线程将 binlog 内容推给 Slave 的 IO 线程;
Slave 将内容写入到 relay log;
Slave SQL 线程读取 relay log,解析并重放执行,实现数据库同步;
主从延时问题
产生原因
网络延迟
Master 并发 TPS 很高, 产生的 DDL 语句超过了 Slave SQL 单线程处理能力;
Master 写是多线程, Slave SQL 执行是单线程;
且 binlog 写是顺序的, 性能高, 而 Slave SQL DML、DDL 执行是随机写的, 较慢;
Slave 查询操作有锁, 且执行时间较长;
解决方法
提升硬件性能;
合理安排从库的数量,一般建议 3-5 台;
主从切换
Master 设置为只读 read only = true;
确保 Slave 已经完成了同步, show slave status 的 seconds_bebind_master = 0;
把 Slave 设置为可读写 read only = false;
将 Slave 设置为 Master, 执行 stop slave & reset master;
主从搭建
待补充
评论