MySQL主从复制(Master-Slave)
封面图
•
2025-10-03
•
MySQL
175
0
0
0
MySQL 主从复制(Master-Slave Replication)是一种常见的数据库高可用和负载均衡解决方案。它通过将一个 MySQL 数据库(主库,Master)的数据同步到另一个或多个 MySQL 数据库(从库,Slave),实现数据的实时备份、读写分离、故障转移等功能。 --- ## 一、主从复制的基本原理 主从复制基于 **二进制日志(Binary Log)** 实现: 1. **主库(Master)**:记录所有对数据库的更改操作(如 INSERT、UPDATE、DELETE 等),并将其写入 **二进制日志(binlog)**。 2. **从库(Slave)**:通过 **I/O 线程** 从主库获取 binlog,并将其保存到本地的 **中继日志(relay log)** 中。 3. **从库的 SQL 线程** 会读取中继日志中的事件,并在从库上重放(replay)这些操作,从而实现与主库的数据一致。 --- ## 二、主从复制的类型 1. **异步复制(Asynchronous Replication)** - 最常见的方式。 - 主库将 binlog 发送给从库后立即返回,不等待从库确认。 - 可能存在数据丢失风险(如果主库崩溃)。 2. **半同步复制(Semi-Synchronous Replication)** - 主库在提交事务时,会等待至少一个从库接收到 binlog 并确认。 - 提高了数据一致性,但可能影响性能。 3. **全同步复制(Fully Synchronous Replication)** - 主库在提交事务前,必须等待所有从库都确认接收并应用了该事务。 - 性能较差,一般用于对数据一致性要求极高的场景。 --- ## 三、主从复制的配置步骤 ### 1. 配置主库(Master) #### a. 修改配置文件(`my.cnf` 或 `my.ini`) ```ini [mysqld] server-id=1 log-bin=mysql-bin # 启用二进制日志 ``` #### b. 创建用于复制的用户 ```sql CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; ``` #### c. 获取主库的二进制日志信息 ```sql SHOW MASTER STATUS; ``` 输出示例: ``` +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 120 | | | +------------------+----------+--------------+------------------+ ``` 记录 `File` 和 `Position` 的值。 --- ### 2. 配置从库(Slave) #### a. 修改配置文件(`my.cnf` 或 `my.ini`) ```ini [mysqld] server-id=2 ``` #### b. 停止从库的复制服务(可选) ```sql STOP SLAVE; ``` #### c. 配置主库连接信息 ```sql CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120; ``` #### d. 启动从库复制 ```sql START SLAVE; ``` #### e. 查看复制状态 ```sql SHOW SLAVE STATUS\G ``` 重点关注以下字段: - `Slave_IO_Running`: 是否为 Yes - `Slave_SQL_Running`: 是否为 Yes - `Last_Error`: 是否有错误 --- ## 四、主从复制的优缺点 ### ✅ 优点: - 实现数据的高可用和容灾 - 支持读写分离,提升系统性能 - 方便进行数据备份和恢复 ### ❌ 缺点: - 异步复制可能导致数据延迟或丢失 - 配置和维护相对复杂 - 对网络稳定性要求较高 --- ## 五、常见问题排查 | 问题 | 解决方法 | |------|----------| | `Slave_IO_Running: No` | 检查网络连接、主库的授权、防火墙设置 | | `Last_Error: ...` | 根据错误信息定位问题,如主库数据不一致、权限不足等 | | 数据不同步 | 使用 `mysqldump` 从主库导出数据再导入从库,重新配置复制 | --- ## 六、扩展:主从复制的升级方案 - **多级复制**:主库 → 从库1 → 从库2 - **级联复制**:从库作为其他从库的主库 - **GTID 复制**:基于全局事务标识符(GTID)的复制方式,简化管理 --- ## 七、总结 MySQL 主从复制是实现数据库高可用、读写分离的重要手段,适用于大多数中大型 Web 应用。合理配置和监控可以有效保障数据的一致性和系统的稳定性。 如果你需要具体的脚本、配置文件模板或者 GTID 复制的详细步骤,我可以继续为你提供帮助!
上一篇:
mysqlbinlog查看并导出为sql文件
下一篇:
mysqldump导出数据时,某些表不导出,排除某些表,不导出某些表
标题录入,一次不能超过6条
返回顶部
留言
留言
评论