mysql 主从架构详解
MySQL 主从架构详解MySQL 主从复制Master-Slave Replication是构建高可用、可扩展数据库系统的核心架构之一。它通过将主数据库Master的变更同步到从数据库Slave实现数据冗余、读写分离和故障恢复。本文将从原理、配置、实战代码和常见问题入手带你深入理解这一架构。## 主从复制的原理MySQL 主从复制基于**二进制日志binlog**机制。主库的所有数据变更如 INSERT、UPDATE、DELETE会记录在 binlog 中从库通过 I/O 线程拉取这些日志并写入中继日志relay log再由 SQL 线程重放从而保持数据一致。关键组件-Master开启 binlog授权复制用户。-Slave配置连接 Master 的信息启动复制线程。-I/O 线程从 Master 拉取 binlog 事件。-SQL 线程执行 relay log 中的 SQL 语句。工作流程1. Master 将数据变更写入 binlog。2. Slave 的 I/O 线程连接到 Master请求 binlog 事件。3. Master 的 dump 线程发送 binlog 给 Slave。4. Slave 将事件写入 relay log。5. Slave 的 SQL 线程重放 relay log更新本地数据。## 配置主从复制### 前提条件- 安装 MySQL 8.0示例使用 Docker 环境。- 确保主从库网络互通本文在同一台机器上演示使用不同端口。### 主库配置 (Master)主库需要开启 binlog 并设置唯一 server-id。以下为 Linux 环境下的配置示例。bash# 编辑主库配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]# 开启二进制日志log_bin /var/log/mysql/mysql-bin.log# 设置服务器 ID主库唯一server-id 1# 指定要复制的数据库可选留空表示所有库binlog-do-db test_db# 二进制日志格式ROW 比 STATEMENT 更可靠binlog_format ROW# 每执行 N 次事务写一次 binlog提升性能sync_binlog 1重启 MySQL 后进入主库创建复制用户sql-- 登录主库mysql -u root -p-- 创建用户仅允许从库 IP本例为 192.168.1.100连接CREATE USER replicator192.168.1.100 IDENTIFIED BY StrongPassword123!;-- 授予复制权限GRANT REPLICATION SLAVE ON *.* TO replicator192.168.1.100;-- 刷新权限FLUSH PRIVILEGES;-- 查看主库状态记录 File 和 Position 值SHOW MASTER STATUS;输出示例------------------------------------------------------------| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |------------------------------------------------------------| mysql-bin.000003 | 154 | test_db | |------------------------------------------------------------### 从库配置 (Slave)从库需要设置不同的 server-id并指定主库信息。bash# 编辑从库配置文件[mysqld]server-id 2# 开启中继日志relay_log /var/log/mysql/mysql-relay-bin.log# 只读模式避免从库写入冲突read_only 1# 可选设置复制过滤replicate-do-db test_db重启从库后执行以下 SQL 建立复制链路sql-- 登录从库mysql -u root -p-- 停止已有的复制如果有STOP SLAVE;-- 配置连接主库的信息CHANGE MASTER TO MASTER_HOST 192.168.1.100, MASTER_PORT 3306, MASTER_USER replicator, MASTER_PASSWORD StrongPassword123!, -- 使用前面 SHOW MASTER STATUS 得到的值 MASTER_LOG_FILE mysql-bin.000003, MASTER_LOG_POS 154;-- 启动复制START SLAVE;-- 查看复制状态SHOW SLAVE STATUS\G;关键字段解释-Slave_IO_Running: YesI/O 线程正常-Slave_SQL_Running: YesSQL 线程正常-Seconds_Behind_Master: 0延迟为 0## 实战代码读写分离演示以下 Python 脚本演示了在主库写入数据并在从库读取。假设主库连接为localhost:3307从库为localhost:3308通过不同端口模拟不同机器。pythonimport mysql.connectorfrom mysql.connector import Error# 主库连接配置写操作master_config { host: localhost, port: 3307, user: root, password: root_password, database: test_db}# 从库连接配置读操作slave_config { host: localhost, port: 3308, user: root, password: root_password, database: test_db}def write_to_master(): 在主库插入数据 try: conn mysql.connector.connect(**master_config) cursor conn.cursor() # 创建表如果不存在 cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ) # 插入一条记录 sql INSERT INTO users (name, email) VALUES (%s, %s) cursor.execute(sql, (Alice, aliceexample.com)) conn.commit() print(f写入成功记录 ID: {cursor.lastrowid}) except Error as e: print(f写入错误: {e}) finally: if conn.is_connected(): cursor.close() conn.close()def read_from_slave(): 从从库读取数据 try: conn mysql.connector.connect(**slave_config) cursor conn.cursor() cursor.execute(SELECT * FROM users) rows cursor.fetchall() print(从库读取结果:) for row in rows: print(row) except Error as e: print(f读取错误: {e}) finally: if conn.is_connected(): cursor.close() conn.close()if __name__ __main__: # 先写入主库 write_to_master() # 等待复制完成实际环境可用轮询 import time time.sleep(1) # 从从库读取 read_from_slave()### 复制延迟监控脚本以下 Shell 脚本定期检查从库延迟并在延迟过大时告警。bash#!/bin/bash# 监控 MySQL 主从复制延迟# 用法: ./monitor_replication.shSLAVE_HOSTlocalhostSLAVE_PORT3308SLAVE_USERrootSLAVE_PASSroot_password# 获取 Seconds_Behind_Master 值LAG$(mysql -h $SLAVE_HOST -P $SLAVE_PORT -u $SLAVE_USER -p$SLAVE_PASS -e SHOW SLAVE STATUS\G | grep Seconds_Behind_Master | awk {print $2})if [[ $LAG NULL ]]; then echo 错误: 复制未启动或状态异常 exit 1fiif [[ $LAG -gt 60 ]]; then echo 警告: 复制延迟超过 60 秒当前延迟: ${LAG}秒 # 可在此处发送邮件或短信告警else echo 正常: 复制延迟 ${LAG}秒fi## 常见问题与优化### 1. 复制中断-IO 线程 No检查网络、防火墙、复制用户权限。-SQL 线程 No查看Last_Error字段可能是主从数据不一致如主库有记录从库没有。可跳过错 误SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1; START SLAVE;### 2. 延迟优化- 使用半同步复制rpl_semi_sync_master_enabled1。- 从库开启log_slave_updates用于级联复制。- 调整innodb_flush_log_at_trx_commit和sync_binlog参数。### 3. 安全性- 使用 SSL 加密复制链路。- 从库设置read_only1避免误写。- 定期备份 binlog 文件。## 总结MySQL 主从复制是保障数据库可用性和扩展性的基石。通过本文的配置演示和实战代码你可以在几分钟内搭建起一套基本的主从架构。关键点包括正确配置 binlog 和 server-id、使用正确的位置参数建立复制、通过监控脚本持续关注延迟。在生产环境中建议结合半同步复制、GTID全局事务标识符和自动故障切换工具如 Orchestrator来进一步提升可靠性。掌握这些技能你将能应对大多数数据库高可用场景。

相关新闻

5步解锁:Input Overlay让直播操作可视化成为新常态

5步解锁:Input Overlay让直播操作可视化成为新常态

5步解锁:Input Overlay让直播操作可视化成为新常态 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay 你是否曾因为观众看不懂你的操作而烦恼?在激烈…

2026/7/31 15:26:04 阅读更多 →
7天实现数据治理自动化:OpenMetadata策略引擎终极实战指南

7天实现数据治理自动化:OpenMetadata策略引擎终极实战指南

7天实现数据治理自动化:OpenMetadata策略引擎终极实战指南 【免费下载链接】OpenMetadata The Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, an…

2026/7/31 15:26:04 阅读更多 →
如何快速掌握BepInEx:Unity游戏插件框架的完整使用指南

如何快速掌握BepInEx:Unity游戏插件框架的完整使用指南

如何快速掌握BepInEx:Unity游戏插件框架的完整使用指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx 想要为心爱的Unity游戏添加新功能、修复Bug或创造全新体验吗&am…

2026/7/31 15:25:04 阅读更多 →

最新新闻

LibreCAD尺寸标注与公差控制实战解析:从基础操作到高级技巧进阶应用

LibreCAD尺寸标注与公差控制实战解析:从基础操作到高级技巧进阶应用

LibreCAD尺寸标注与公差控制实战解析:从基础操作到高级技巧进阶应用 【免费下载链接】LibreCAD LibreCAD is a cross-platform 2D CAD program. It can read DXF/DWG, and write DXF/DWG/PDF/SVG files. It supports point/line/circle/ellipse/parabola/hyperbola/…

2026/7/31 16:12:20 阅读更多 →
TexTools-Blender UV智能选择工具:如何快速解决翻转、重叠和相同UV岛问题

TexTools-Blender UV智能选择工具:如何快速解决翻转、重叠和相同UV岛问题

TexTools-Blender UV智能选择工具:如何快速解决翻转、重叠和相同UV岛问题 【免费下载链接】TexTools-Blender TexTools is a UV and Texture toolset created several years ago for Blender and Max by renderhjs. In this open repository, originally created by…

2026/7/31 16:12:20 阅读更多 →
物理与环境安全测评:从机房选址到访问控制,筑牢密码应用基石

物理与环境安全测评:从机房选址到访问控制,筑牢密码应用基石

1. 从“机房”到“安全堡垒”:物理与环境安全测评的认知重塑 提到“密评”,很多人的第一反应是复杂的密码算法、密钥管理和网络协议。然而,一个坚固的密码应用体系,其基石往往不在虚拟的代码世界里,而在那些看得见、摸…

2026/7/31 16:12:20 阅读更多 →
010、MLCA混合局域通道注意力与LSK大核选择注意力在检测头前的部署——即插即用涨点验证

010、MLCA混合局域通道注意力与LSK大核选择注意力在检测头前的部署——即插即用涨点验证

010、MLCA混合局域通道注意力与LSK大核选择注意力在检测头前的部署——即插即用涨点验证 写在前面:一个让我调了三天三夜的bug 事情是这样的。上个月我在做YOLOv11的改进实验,想往检测头前面塞一个注意力模块,提升小目标的检测能力。一开始我…

2026/7/31 16:12:20 阅读更多 →
Unity游戏实时翻译工具XUnity Auto Translator原理与实战指南

Unity游戏实时翻译工具XUnity Auto Translator原理与实战指南

1. 项目概述:为什么需要为Unity游戏引入实时翻译? 如果你是一个独立游戏开发者,或者是一个热衷于体验全球各地Unity游戏的玩家,那么语言障碍很可能是一个绕不开的痛点。想象一下,你精心制作的游戏因为文本量巨大&#…

2026/7/31 16:12:20 阅读更多 →
TCP连接拔网线后是否还存在?深入解析连接状态与超时机制

TCP连接拔网线后是否还存在?深入解析连接状态与超时机制

在实际面试中,很多Java开发者对TCP连接的"面向连接"特性理解不够深入。当面试官问到"如果直接拔掉网线,TCP连接还存在吗?"这个问题时,超过90%的候选人会给出错误答案。本文将深入分析TCP连接的本质特性&#…

2026/7/31 16:11:20 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻