如图,原本一个一主多从的服务是这样子的

主备切换后的结果

基于位点的主备切换
把节点B设置成节点A’的从库的时候,需要执行一条change master命令,这条命令有以下6个参数:
- MASTER_HOST、MASTER_PORT、MASTER_USER和MASTER_PASSWORD四个参数,分别代表了主库A’的IP、端口、用户名和密码。
- 最后两个参数MASTER_LOG_FILE和MASTER_LOG_POS表示,要从主库的master_log_name文件的master_log_pos这个位置的日志继续同步。而这个位置就是我们所说的同步位点,也就是主库对应的文件名和日志偏移量。
原来节点B是A的从库,本地记录的也是A的位点。但是相同的日志,A的位点和A’的位点是不同的。因此,从库B要切换的时候,就需要先经过“找同步位点”这个逻辑。这个点很难精确到,只能取一个大概的位置。考虑到切换过程中不能丢数据,所以我们找位点的时候,总是要找一个“稍微往前”的,然后再通过判断跳过那些在从库B上已经执行过的事务。
一种取同步位点的方法是这样的:
1. 等待新主库A’把中转日志(relay log)全部同步完成;
2. 在A’上执行

本文详细介绍了数据库主备切换的过程及难点,包括位点切换的原理与限制,以及如何利用GTID进行更为精确的主备切换。GTID不仅简化了切换过程,还解决了在线DDL操作带来的问题。
最低0.47元/天 解锁文章
466

被折叠的 条评论
为什么被折叠?



