当前位置: 首页 > article >正文

MySQL 日志数据同步的详细教程

以下是 MySQL 日志数据同步的详细教程,主要介绍基于二进制日志(binlog)的主从复制和基于 GTID 的高级同步方案:
一、MySQL 二进制日志(binlog)同步基础
1. 二进制日志原理
binlog 是 MySQL 的事务性日志,记录所有导致数据变更的 SQL 语句(如 INSERT、UPDATE、DELETE)。
主从复制 通过 binlog 实现:主库记录 binlog → 从库复制 binlog → 从库重放 SQL 语句。
2. 配置主库(Master)
修改my.cnf配置文件:
[mysqld]
server-id = 1                 # 唯一ID,范围1-2^32-1
log-bin = /var/log/mysql/binlog   # 启用binlog并指定路径
binlog-do-db = mydatabase     # 指定需要同步的数据库(可选)
expire-logs-days = 7          # binlog过期时间
max-binlog-size = 100M        # 单个binlog文件最大大小
重启 MySQL 后,创建用于复制的用户:
sql
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
获取主库当前 binlog 位置:
sql
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| binlog.000001    | 1234     | mydatabase   |                  |
+------------------+----------+--------------+------------------+
3. 配置从库(Slave)
修改my.cnf配置文件:
[mysqld]
server-id = 2                 # 唯一ID,不能与主库重复
relay-log = /var/log/mysql/relay-bin  # 中继日志路径
log-bin = /var/log/mysql/binlog       # 从库也可作为其他从库的主库
read-only = 1               # 从库设置为只读(可选)
重启 MySQL 后,配置主库连接信息:
CHANGE MASTER TO
  MASTER_HOST='master_ip',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='binlog.000001',  # 主库SHOW MASTER STATUS的File值
  MASTER_LOG_POS=1234;              # 主库SHOW MASTER STATUS的Position值

START SLAVE;
SHOW SLAVE STATUS\G;  # 检查同步状态
确保以下两个状态均为Yes:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
二、基于 GTID 的高级同步
1. GTID(全局事务标识符)原理
GTID 是全局唯一的事务 ID(格式如UUID:Transaction_ID),每个事务在主库生成后即固定。
优势:自动定位 binlog 位置,简化拓扑结构变更,支持多主复制。
2. 配置主库(GTID 模式)
修改my.cnf配置文件:
[mysqld]
server-id = 1
log-bin = /var/log/mysql/binlog
gtid_mode = ON                # 启用GTID模式
enforce-gtid-consistency = ON # 强制GTID一致性
log-slave-updates = ON        # 从库更新写入binlog
3. 配置从库(GTID 模式)
修改my.cnf配置文件:
[mysqld]
server-id = 2
gtid_mode = ON
enforce-gtid-consistency = ON
log-slave-updates = ON
配置同步(无需指定 binlog 位置):
CHANGE MASTER TO
  MASTER_HOST='master_ip',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_AUTO_POSITION=1;      # 使用GTID自动定位

START SLAVE;
三、常见同步问题排查
1. 状态检查命令
SHOW SLAVE STATUS\G;          # 查看从库同步状态
SHOW BINARY LOGS;             # 查看主库binlog文件列表
SHOW RELAYLOG EVENTS;         # 查看从库中继日志事件
2. 常见错误及解决
IO 线程错误(Slave_IO_Running: No):
检查主从网络连通性(ping、telnet 3306)
验证复制用户权限
检查主库 binlog 文件是否存在
SQL 线程错误(Slave_SQL_Running: No):
查看Last_SQL_Error定位具体错误
从库与主库数据不一致时,可尝试:
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  # 跳过一个事务
START SLAVE;

四、其他同步方案
1. 半同步复制(Semi-sync Replication)
确保事务在至少一个从库写入中继日志后才返回成功,提高数据安全性。
-- 主库安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;

-- 从库安装插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
2. 多源复制(Multi-source Replication)
一个从库同时从多个主库复制数据(需 MySQL 5.7+):
-- 配置多个通道
CHANGE MASTER TO
  MASTER_HOST='master1_ip',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_AUTO_POSITION=1
FOR CHANNEL 'channel1';

CHANGE MASTER TO
  MASTER_HOST='master2_ip',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_AUTO_POSITION=1
FOR CHANNEL 'channel2';
五、生产环境注意事项
硬件配置:主库性能不足可能导致 binlog 生成慢,影响同步延迟。
网络优化:主从服务器建议部署在同机房,低延迟网络(RTT < 1ms)。
监控告警:
监控Seconds_Behind_Master(同步延迟时间)
监控 binlog 磁盘空间(避免占满导致主库挂起)
备份策略:定期备份 binlog 文件,防止主库故障时数据丢失。

http://www.lryc.cn/news/2399114.html

相关文章:

  • 2025 Java面试大全技术文章(面试题1)
  • docker 中 什么是「卷」?(Volume)
  • 三维可视化和实时数据处理对前端性能要求以及优化渲染效率
  • 基于VU37P的高性能采集板卡
  • 2025-05-31 Python深度学习10——模型训练流程
  • 卷积神经网络(CNN)、YOLO和人脸识别之间的关系
  • K8S StatefulSet 快速开始
  • 重新测试deepseek Jakarta EE 10编程能力
  • nav2笔记-250603
  • 指纹识别+精准化POC攻击
  • LeetCode[404]左叶子之和
  • mac环境下的python、pycharm和pip安装使用
  • C语言多级指针深度解析:从一级到三级的奥秘
  • uni-app学习笔记十九--pages.json全局样式globalStyle设置
  • BUUCTF[极客大挑战 2019]Havefun 1题解
  • 【基础】Unity中Camera组件知识点
  • Tomcat优化篇
  • Temporal Fusion Transformer(TFT)扩散模型时间序列预测模型
  • 【LangServe部署流程】5 分钟部署你的 AI 服务
  • 攻防世界-unseping
  • 微软推出 Bing Video Creator,免费助力用户轻松创作 AI 视频
  • (13)java+ selenium->元素定位大法之By_partial_link_text
  • Xget 正式发布:您的高性能、安全下载加速工具!
  • [yolov11改进系列]基于yolov11使用FasterNet替换backbone用于轻量化网络的python源码+训练源码
  • 一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化
  • 企业级安全实践:SSL/TLS 加密与权限管理(一)
  • 2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略
  • RabbitMQ如何保证消息可靠性
  • 【MATLAB代码】制导——三点法,二维平面下的例程|运动目标制导,附完整源代码
  • Spring Security用户管理机制详解