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

数据库主从复制学习笔记

目录

一、Binlog(Binary Log)

核心特性

核心用途

Binlog 格式(3种类型)

二、主从复制

核心原理

主库(Master)

从库(Slave)

配置步骤(以 MySQL 为例)

1. 主库配置

2. 创建复制账号

3. 从库配置

4. 启动复制

三、GTID

GTID 核心组成

GTID 核心优势

GTID 启用配置

修改 my.cnf

重启 MySQL 生效


一、Binlog(Binary Log)

Binlog(Binary Log)是 MySQL 数据库的核心日志之一,用于记录数据库的逻辑操作。简单来说,它像一台摄像机,忠实记录所有对数据库进行修改的 SQL 语句(如 INSERT/UPDATE/DELETE)或表结构变更(如 CREATE/ALTER)等操作。

核心特性
  1. 逻辑日志

记录的是 SQL 语句的原始逻辑(例如:UPDATE users SET age=20 WHERE id=1;),而非底层数据页的物理修改细节(这是 redo log 的特性)。

  1. 持久化存储

Binlog 以文件形式存储在磁盘中,不会随数据库重启而丢失,生命周期由配置决定(可长期保存)。

  1. 可追溯性

通过解析 binlog 文件,可以精确还原数据库的历史变更过程。

核心用途
  1. 主从复制(Replication)

主库将 binlog 发送给从库,从库重放这些日志以实现数据同步,是 MySQL 高可用架构的基础。

  1. 数据恢复

当误删数据或数据库故障时,可通过 binlog + 定期备份实现时间点恢复(Point-in-Time Recovery)。

Binlog 格式(3种类型)

格式

特点

示例

STATEMENT

记录原始 SQL 语句

UPDATE orders SET create_time = NOW() WHERE status = 'unpaid';

ROW

记录每行数据的变化细节(如修改前后的整行数据

记录每行数据修改前后的完整值(例如:id=1 的用户 balance 从 500 → 400)

MIXED

混合模式,根据 SQL 语句自动选择 STATEMENT 或 ROW 格式

对于 INSERT INTO payments VALUES (UUID(), 100); MIXED 模式会自动切到 ROW 格式,避免主键冲突。

二、主从复制

是数据库系统中实现数据高可用、读写分离、负载均衡的核心技术。其核心思想是通过将主库(Master)的数据变更异步/同步复制到从库(Slave),使从库与主库保持数据一致。

核心原理
主库(Master)
  • 记录所有数据变更到 Binlog(二进制日志)
  • 通过 Binlog Dump 线程 向从库发送日志事件
从库(Slave)
  • I/O 线程:连接主库,接收 Binlog 并写入本地 Relay Log(中继日志)
  • SQL 线程:读取 Relay Log,重放 SQL 事件,实现数据同步
配置步骤(以 MySQL 为例)
1. 主库配置

# my.cnf
[mysqld]
server_id = 1               # 唯一ID
log_bin = mysql-bin         # 开启Binlog
binlog_format = ROW         # 推荐ROW模式
2. 创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
3. 从库配置
# my.cnf
[mysqld]
server_id = 2               # 唯一ID,不能与主库冲突
relay_log = mysql-relay-bin # 开启Relay Log
read_only = ON              # 从库设为只读(防误操作)
4. 启动复制
-- 从库执行
CHANGE MASTER TO
  MASTER_HOST = '主库IP',
  MASTER_USER = 'repl',
  MASTER_PASSWORD = 'your_password',
  MASTER_LOG_FILE = 'mysql-bin.000001', -- 主库当前Binlog文件名
  MASTER_LOG_POS = 154;                 -- 主库当前Binlog位置

START SLAVE;  -- 启动复制

三、GTID

GTID(全局事务标识符)是 MySQL 主从复制中用于唯一标识事务的机制,它解决了传统复制依赖 binlog 文件名和位置的痛点。

GTID 核心组成

每个 GTID 格式为: GTID = source_id:transaction_id

    • source_id:产生事务的服务器唯一标识(通常是 server_uuid)
    • transaction_id:事务序列号,单调递增(如 1-100 表示第1到第100个事务)

示例: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5 表示该事务来自 server_uuid 为 3E11FA47... 的服务器,事务序列号为1到5。

GTID 核心优势

传统复制痛点

GTID 解决方案

主从切换需手动指定 binlog 位置

自动追踪事务,无需关心文件位置

难以确定事务是否在所有从库执行

通过 GTID 集合全局唯一标识事务状态

级联复制拓扑管理复杂

事务路径清晰,支持任意拓扑结构

GTID 启用配置
修改 my.cnf
   [mysqld]
   gtid_mode = ON                 # 启用 GTID
   enforce_gtid_consistency = ON  # 强制 GTID 一致性
   log_bin = mysql-bin            # 必须开启 binlog
   server_id = 1                  # 服务器唯一 ID
重启 MySQL 生效
   systemctl restart mysqld

相关文章:

  • Android 中支持旧版 API 的方法(API 30)
  • 深入解析计算机操作系统的底层架构与核心模块功能
  • SQL 查询中使用 IN 导致性能问题的解决方法
  • vue3开发基础流程(前21)
  • 2025年认证杯C题超详细解题思路
  • 基于Flask的勒索病毒应急响应平台架构设计与实践
  • uniApp开发微信小程序-连接蓝牙连接打印机上岸!
  • Java抽象类与抽象方法详解
  • WSA(Windows 安卓子系统)过检测教程
  • ECMAScript 6 新特性(二)
  • 蓝桥杯python组考前准备
  • 代码随想录第14天:(二叉树)
  • CasaOS香橙派安装HomeAssistant智能家居系统并实现远程管理家中智能设备
  • 微服务简述
  • Backtrader从0到1——第一个回测策略
  • Gerapy二次开发:用户管理专栏主页面开发
  • 算法训练之动态规划(二)
  • 深度解析强化学习:原理、算法与实战
  • 【LunarVim】解决which-key 自定义键位注册不成功问题
  • adb|scrcpy的安装和配置方法|手机投屏电脑|手机声音投电脑|adb连接模拟器或手机
  • 动漫网站开发与建设/搜索引擎优化的含义和目标
  • 网站地区词优化/百度灰色关键词排名
  • 自动跳转手机网站/seo教程免费
  • vs2017 asp网站开发/百度竞价排名是什么
  • 17网站一起做网店广州新塘/网络公司名字
  • 桂林漓江学院/搜索引擎简称seo