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

MySQL主从同步(主从复制)

mysql主从同步是什么

        MySQL 主从同步(Master-Slave Replication)是一种将数据从一个 MySQL 数据库服务器(主库,Master)复制到一个或多个其他服务器(从库,Slave)的技术。它基于二进制日志(binlog)实现数据的实时或近实时同步,是 MySQL 高可用性和扩展性的基础。

工作原理

  1. 主库记录变更:主库将所有数据变更操作(如 INSERT、UPDATE、DELETE)记录到二进制日志(binlog)中。
  2. 从库复制 binlog:从库通过 IO 线程连接主库,读取主库的 binlog 并写入自己的中继日志(relay log)。
  3. 从库执行变更:从库的 SQL 线程读取中继日志,将其中的变更操作在本地执行,实现数据同步。

优点

  1. 读写分离:将读请求分发到多个从库,减轻主库压力,提升系统整体吞吐量
  2. 灾备:当主库故障时,从库可作为主库的热备份,降低数据丢失风险。

缺点

  1. 数据延迟:主从同步存在延迟(尤其是主库写压力大时),从库数据可能不是实时的。
  2. 维护与资源消耗: 多个从库需要占用大量的服务器资源,同时也增加了维护复杂度

实现步骤

1.准备两台服务器(也可以一台机器多个MySQL实例,参考在一台CentOS服务器上开启多个MySQL服务-CSDN博客),一主一从,并且安装了MySQL(本文档基于CentOS7 和 MySQL5.7)

2.主服修改mysql配置文件 /etc/my.cnf,重启mysql生效,systemctl restart mysqld 

[mysqld]

# server-id,集群中的server-id不能出现重复的

server-id=1

# 开启bin-log日志,可以指定具体路径

log-bin=mysql-bin

# 行级复制

binlog-format=ROW 

3.从服修改mysql配置文件 /etc/my.cnf,重启mysql生效,systemctl restart mysqld 

[mysqld]

server-id = 2

# 启用中继日志(记录主服发送的binlog),可以指定具体路径

relay-log = mysql-relay-bin

# 同步的数据库

replicate-do-db = zero

# 设置从服数据库为只读(可选)

read-only=1

4. 主服、从服创建mysql主从同步专用用户

# 创建用户,且只有指定IP能够访问

CREATE USER 'repl'@'对方IP' IDENTIFIED BY 'your_password';

# 授予复制权限,且只有指定IP能够访问,*.*表示允许访问所有数据库的所有表

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'对方IP' ;

# 刷新权限

FLUSH PRIVILEGES;

5. 将数据导入到从服,导出数据时最好停止相关服务,或者锁表

# 导出数据,--single-transaction保证备份一致性,--master-data=2以注释形式记录binlog信息

mysqldump -u root -p --single-transaction --master-data=2 --databases zero > zero.sql

 6.获取备份文件中的binlog信息

head -50 zero.sql | grep MASTER_LOG_FILE

# 输出示例:

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000707', MASTER_LOG_POS=3828256;

7.从服执行SQL,建立主从同步关系,MASTER_LOG_FILE 和  MASTER_LOG_POS 字段与上一步获取的相对应 

CHANGE MASTER TO

  MASTER_HOST='主服IP',

  MASTER_USER='repl',

  MASTER_PASSWORD='PASSWORD',

  MASTER_LOG_FILE='bin-log.000707',

  MASTER_LOG_POS=3828256;

# 启动同步线程

START SLAVE;

# 查看同步状态,输出的数据中Slave_IO_Running和Slave_SQL_Running字段均为Yes则是成功

SHOW SLAVE STATUS\G;

### 主服对zero数据库进行增删改,观察从服的zero库数据是否同步

### 如何判断从服数据是否完全同步?

# 从服执行SQL  

SHOW SLAVE STATUS\G

# 主服执行SQL  

SHOW MASTER STATUS;

# 对比从服的Relay_Log_File和Exec_Master_Log_Pos字段值与主服的File和Position字段值是否一致

相关文章:

  • RDD行动算子案例
  • 论文分享➲ ICLR2025 Oral | Scaling and evaluating sparse autoencoders
  • 使用 Spring 和 Redis 创建处理敏感数据的服务
  • 剪映学习03
  • 常见图像融合算法(图像泊松融合)
  • neo4j图数据库基本概念和向量使用
  • python小区物业管理系统-小区物业报修系统
  • Missashe高数强化学习笔记(随时更新)
  • Redis 存储原理与数据模型(三)
  • 字符串---Spring字符串基本处理
  • TensorFlow中数据集的创建
  • 《时序数据库全球格局:国产与国外主流方案的对比分析》
  • 数据库的SQLSTATE[23000]异常,通过自定义异常类来提供更友好的提示信息
  • 2021-11-15 C++下一个生日天数
  • UnityDots学习(五)
  • 【大模型】LLM概念相关问题(上)
  • C语言编程--19.括号生成
  • 【数据机构】2. 线性表之“顺序表”
  • 行业 |四大痛点待破:“拆解”DeepSeek一体机
  • 布隆过滤器:高效的数据结构与应用详解
  • 警方通报男子地铁上拍视频致乘客恐慌受伤:列车运行一度延误,已行拘
  • 巴基斯坦对印度发起网络攻击,致其约70%电网瘫痪
  • 习近平会见缅甸领导人敏昂莱
  • 上报集团社长李芸:发挥媒体优势,让中非民心在数字时代更深层互联互通
  • 阿里CEO:将以饱和式投入打法,聚焦几大核心战役
  • 国防部:正告菲方停止以任何方式冲撞中方核心利益