
MySQL作为广泛使用的关系型数据库管理系统,提供了主从复制功能,以提高系统的可靠性和性能
主从复制不仅有助于读写分离,还能在主库发生故障时迅速切换到从库,保证业务连续性
本文将详细介绍MySQL如何实现主从库的切换,包括主从复制的原理、配置步骤以及切换流程
一、主从复制的原理 MySQL主从复制的实现基于二进制日志(binary log)和复制线程(replication thread)
主库记录所有更改数据的操作到二进制日志中,从库通过读取和执行这些日志来保持与主库的数据一致性
具体流程如下: 1.主库记录操作:主库将所有写操作(INSERT、UPDATE、DELETE等)记录到二进制日志中
2.日志传输:从库上的I/O线程连接到主库,读取二进制日志,并将其写入到从库的中继日志(relay log)中
3.日志应用:从库上的SQL线程读取中继日志,并应用其中的操作到从库数据库中
通过这种方式,从库能够实时或近似实时地反映主库的数据状态
二、主从复制的配置步骤 在配置MySQL主从复制之前,确保主库和从库上的MySQL版本兼容,并且网络互通
以下是配置步骤: 1. 配置主库 (1)编辑主库的MySQL配置文件(通常是`my.cnf`或`my.ini`),添加以下内容: ini 【mysqld】 server-id=1 主库的唯一标识,必须是一个正整数 log_bin=mysql-bin启用二进制日志 (2)重启MySQL服务以使配置生效: bash sudo systemctl restart mysql (3)在主库上创建一个用于复制的用户,并授予必要的权限: sql CREATE USER replication@% IDENTIFIED BY password; GRANT REPLICATION SLAVE ON. TO replication@%; FLUSH PRIVILEGES; (4)查看主库的状态,记下二进制日志文件名和位置: sql SHOW MASTER STATUS; 2. 配置从库 (1)编辑从库的MySQL配置文件,添加以下内容: ini 【mysqld】 server-id=2 从库的唯一标识,必须是一个不同于主库的正整数 relay-log=mysql-relay-bin启用中继日志 (2)重启MySQL服务: bash sudo systemctl restart mysql (3)在从库上设置主库的信息: sql CHANGE MASTER TO MASTER_HOST=主库IP, MASTER_USER=replication, MASTER_PASSWORD=password, MASTER_LOG_FILE=mysql-bin.000001,替换为SHOW MASTER STATUS输出的File MASTER_LOG_POS=4;替换为SHOW MASTER STATUS输出的Position (4)启动从库的复制线程: sql START SLAVE; 3. 检查复制状态 在从库上执行以下命令,检查复制状态: sql SHOW SLAVE STATUSG; 确保`Slave_IO_Running`和`Slave_SQL_Running`的状态都为`YES`,`Seconds_Behind_Master`为0,表示从库与主库同步正常
三、主从切换流程 主从切换分为计划性切换(如灾备演练)和故障切换两种情况
下面将分别介绍这两种情况的切换流程
1. 计划性切换 计划性切换通常用于灾备演练或系统升级,确保在切换过程中数据一致性
以下是具体步骤: (1)切断应用对主库的流量:通过负载均衡器或应用配置,将读写请求切换到从库或其他备用库
(2)主库设置只读:防止在主库上进行写操作,确保数据一致性
sql SET GLOBAL read_only=ON; SET GLOBAL super_read_only=ON; (3)检查从库复制状态:确保从库与主库同步一致
sql SHOW SLAVE STATUSG; (4)比对GTID(全局事务标识符):如果启用了GTID,需要比对主库和从库的GTID集合是否一致
sql SELECT @@global.gtid_executed; 使用`GTID_SUBSET`函数进行比对
(5)从库停掉复制进程并清空主从信息: sql STOP SLAVE; RESET SLAVE ALL; (6)从库关闭只读,转为新主库: sql SET GLOBAL read_only=OFF; SET GLOBAL super_read_only=OFF; (7)主库设置执行新主库的复制链路,转为新从库: sql CHANGE MASTER TO MASTER_HOST=新主库IP, MASTER_USER=replication, MASTER_PASSWORD=password, MASTER_AUTO_POSITION=1; START SLAVE; (8)应用流量切向新主库:更新应用配置或负载均衡器,将读写请求切换到新主库
2. 故障切换 故障切换通常发生在主库宕机或无法正常工作的情况下,切换过程中需要特别注意数据一致性
以下是具体步骤: (1)确认主库故障:检查主库是否无法响应请求或启动
(2)选择最新的从库作为新主库:通常选择延迟最小的从库
(3)停止从库的复制进程: sql STOP SLAVE; (4)将从库提升为新主库:关闭只读模式
sql SET GLOBAL read_only=OFF; SET GLOBAL super_read_only=OFF; (5)其他从库重新连接到新主库: sql CHANGE MASTER TO MASTER_HOST=新主库IP, MASTER_USER=replication, MASTER_PASSWORD=password, MASTER_AUTO_POSITION=1; START SLAVE; (6)数据一致性校验:如果主库宕机前存在未同步的数据,需要使用binlog或其他工具进行数据恢复和校验
四、自动化切换的实现 为了提高切换效率和可靠性,可以使用自动化工具和脚本实现主从切换
例如,可以使用MHA(Master High Availability Manager)或Orchestrator等工具来监控主库状态,并在主库故障时自动执行切换流程
此外,还可以编写自定义脚本,结合监控工具(如Nagios、Prometheus)实现自动化切换
以下是一个简单的Bash脚本示例,用于主从切换: bash !/bin/bash 定义主从数据库的IP和用户凭证 MASTER_IP=主数据库IP SL
MySQL实战:轻松新增LIST表分区,提升数据库性能
MySQL:每三小时数据统计攻略
MySQL主从库切换实操指南
MySQL导出CSV文件打开指南
MySQL常见陷阱与防范教程
MySQL存储图片操作在JSP中的实现
MySQL数据库新增JSON字段指南
MySQL实战:轻松新增LIST表分区,提升数据库性能
MySQL:每三小时数据统计攻略
MySQL导出CSV文件打开指南
MySQL常见陷阱与防范教程
MySQL存储图片操作在JSP中的实现
MySQL数据库新增JSON字段指南
PL/SQL开发者必看:如何通过CMD连接MySQL数据库教程
MySQL连接数据库实用语句指南
MySQL无法重启,日志缺失怎么办?
MySQL面试必备技能解锁
MySQL字段长度扩容指南
MySQL多表多字段关联查询技巧