关系型数据库MySQL(三):主从复制

张开发
2026/4/17 7:35:23 15 分钟阅读

分享文章

关系型数据库MySQL(三):主从复制
数据库主从复制一、主从复制核心概念定义主从复制是一种数据库架构模式允许一个 MySQL 数据库服务器主库将其数据变更自动复制到一个或多个其他 MySQL 服务器从库。目的高可用主库故障时从库可接管服务读写分离主库处理写操作从库处理读操作分担负载数据备份从库作为实时备份数据分析在从库运行分析任务避免影响主库性能二、主从复制工作原理理论核心MySQL 主从复制基于二进制日志Binary Log实现异步复制主库Master开启二进制日志binlog所有数据变更增删改会以“事件”形式记录到binlog从库连接主库后主库启动一个Binlog Dump 线程向从库发送binlog内容从库Slave开启中继日志relay logI/O 线程连接主库读取binlog并写入本地relay logSQL 线程读取relay log并重放其中的 SQL 事件实现数据同步关键点复制是异步的默认主库提交事务后立即返回不等待从库确认复制单位可以是语句Statement-Based或行Row-Based后者更可靠三、OpenEuler 环境准备运维实操1. 环境说明操作系统OpenEuler 22.03 LTSMySQL 版本8.0.26通过dnf安装服务器规划主库192.168.1.100从库192.168.1.1012. 安装 MySQL主从库相同# 安装MySQL Server sudo dnf install mysql-server # 启动服务并设置开机自启 sudo systemctl start mysqld sudo systemctl enable mysqld # 获取初始密码MySQL 8.0默认生成临时密码 sudo grep temporary password /var/log/mysqld.log3. 安全初始化主从库相同mysql_secure_installation # 根据提示设置root密码、移除测试库等四、主库配置192.168.1.1001. 修改配置文件/etc/my.cnf[mysqld] server-id 1 # 唯一ID主从不能重复 log-bin mysql-bin # 开启二进制日志 binlog-format ROW # 推荐使用ROW模式 expire_logs_days 7 # 自动清理7天前的日志 max_binlog_size 100M # 单个binlog文件大小 bind-address 0.0.0.0 # 允许所有IP连接生产环境建议限制2. 重启 MySQL 服务sudo systemctl restart mysqld3. 创建复制专用账户CREATE USER repl192.168.1.101 IDENTIFIED BY StrongPass!123; GRANT REPLICATION SLAVE ON *.* TO repl192.168.1.101; FLUSH PRIVILEGES;4. 锁定主库并获取状态信息FLUSH TABLES WITH READ LOCK; -- 锁定所有表禁止写入 SHOW MASTER STATUS; -- 记录File和Position值输出示例------------------------------------------------------------ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | ------------------------------------------------------------ | mysql-bin.000003 | 785 | | | ------------------------------------------------------------5. 备份主库数据可选若从库无数据mysqldump -u root -p --all-databases --master-data master_db.sql6. 解锁主库UNLOCK TABLES;五、从库配置192.168.1.1011. 修改配置文件/etc/my.cnf[mysqld] server-id 2 # 不同于主库 relay-log mysql-relay # 中继日志名称 read_only ON # 从库只读避免误写2. 重启 MySQL 服务sudo systemctl restart mysqld3. 导入主库备份若已备份mysql -u root -p master_db.sql4. 配置复制链路CHANGE MASTER TO MASTER_HOST192.168.1.100, MASTER_USERrepl, MASTER_PASSWORDStrongPass!123, MASTER_LOG_FILEmysql-bin.000003, -- 主库SHOW MASTER STATUS的值 MASTER_LOG_POS785; START SLAVE; -- 启动复制5. 检查复制状态SHOW SLAVE STATUS\G关键指标Slave_IO_Running: YesI/O线程正常Slave_SQL_Running: YesSQL线程正常Seconds_Behind_Master: 0无延迟六、故障排查与运维技巧1. 常见错误处理I/O 线程错误如网络不通STOP SLAVE; CHANGE MASTER TO ...; -- 重新配置 START SLAVE;SQL 线程错误如主键冲突STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER1; -- 跳过1个错误事件 START SLAVE;2. 延迟监控SHOW SLAVE STATUS\G # 关注 Seconds_Behind_Master3. 主从切换Failover停止主库写入提升从库为主库STOP SLAVE; RESET SLAVE; SET GLOBAL read_onlyOFF;修改应用连接指向新主库七、高级主题GTID 复制可选GTIDGlobal Transaction Identifier简化了复制管理# 主从库均需配置 [mysqld] gtid_modeON enforce_gtid_consistencyON配置命令CHANGE MASTER TO MASTER_AUTO_POSITION1; -- 自动定位同步点八、总结通过上述步骤你已在 OpenEuler 系统上成功搭建 MySQL 主从复制环境。关键要点原理基于 binlog 的异步复制配置server-id、log-bin、relay-log运维SHOW SLAVE STATUS监控、GTID 进阶附录常用命令速查-- 主库 SHOW MASTER STATUS; SHOW BINARY LOGS; -- 从库 SHOW SLAVE STATUS\G STOP SLAVE; START SLAVE; RESET SLAVE ALL; -- 彻底重置复制

更多文章