MYSQL——数据库主从切换原理

摘要

MySQL主备复制的基础结构,但这些都是一主一备的结构。大多数的互联网应用场景都是读多写少,因此你负责的业务,在发展过程中很可能先会遇到读性能的问题。而在数据库层解决读性能问题,因此在互联网中尝尝使用的的是一主多从架构。

一、一主多从结构

图中,虚线箭头表示的是主备关系,也就是 A 和 A’互为主备, 从库 B、C、D 指向的是主库 A。一主多从的设置,一般用于读写分离,主库负责所有的写入和一部分读,其他的读请求则由从库分担。在一主多从架构下,主库故障后的主备切换问题。图就是主库发生故障,主备切换后的结果。

### MySQL 主从复制配置 #### 配置主节点 为了实现MySQL主从复制,首先需要配置主节点。这涉及到修改`my.cnf`文件中的设置来启用二进制日志并指定唯一的服务器ID。 ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-format=MIXED ``` 上述配置启用了二进制日志功能,并设置了服务器ID为1[^3]。此外,通过设定`binlog-format`参数可以选择复制的方式,默认是混合模式(Mixed-mode Replication)[^1]。 #### 备份主节点数据 完成主节点的基础配置之后,需创建一份完整的数据库快照用于初始化从节点。可以利用`mysqldump`工具导出整个数据库: ```bash mysqldump --all-databases --master-data > backup.sql ``` 此命令不仅会转储所有的表结构和数据,还会自动记录当前二进制日志的位置信息以便后续同步使用。 #### 同步至从节点 将生成好的SQL脚本传输给目标机器上的从节点,并导入其中: ```sql mysql < /path/to/backup.sql ``` 接着调整从节点的相关配置项以匹配其角色需求——同样编辑`my.cnf`文件赋予不同于主节点的新ID号以及指向远程主机的信息。 ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin read-only=ON ``` 这里设定了读取只限权限(read-only),防止意外写入破坏一致性;同时指明了继电器日志(relay log)路径方便追踪变更历史。 ### MySQL 主从复制原理 MySQL主从复制机制依赖于二进制日志(Binary Log)来跟踪发生在主服务器上的所有更改事件。每当有新的事务提交成功后,相应的更新会被追加到该文件内形成一系列的操作指令集。随后这些记录被传递给一个或多个订阅者(即所谓的“从”实例), 它们负责重放相同的动作从而保持与源头一致的状态。 具体来说存在三种不同的复制策略可供选择:基于行(Row-Based Replication,RBR)、基于语句(Statement-Based Replication,SBR) 和混合型(Mixed Mode Replication,MMR) 。前两者分别侧重于精确反映单条记录级别的变动或是概括性的SQL表达式描述整体行为特征;而后者则综合考虑两方面优势动态切换最合适的方案应用场合。 对于SBR而言,尽管占用资源相对较少却难以确保跨平台移植性和复杂查询场景下的准确性;相反地,RBR虽然消耗更多存储空间但提供了更高的可靠性和可维护性特性[^2]。 ### 故障排查方法论 当遇到诸如“Got fatal error 1236 from master”的错误提示时,意味着从库尝试获取不存在的日志文件(`mysql-bin.000004`) ,然而实际上主库仅存最早的几个版本(`mysql-bin.000001`) [^4]。这类问题往往源于时间差造成的不兼容状况或者是网络连接不稳定引起的丢包现象。 针对这种情况建议采取如下措施加以修复: - **重新建立初始状态** :停止现有进程链路关系,按照前述步骤再次执行全量迁移过程; - **手动修正偏移量** : 如果确认丢失部分不影响全局完整性,则可以在Slave端强制跳过特定位置继续追赶进度; ```sql STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=<适当数值>; START SLAVE; ``` 以上操作能够帮助恢复正常的运作秩序,不过务必谨慎行事以免引发更大范围内的异常波动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庄小焱

我将坚持分享更多知识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值