当前位置: 首页 > 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字段值是否一致

http://www.xdnf.cn/news/366931.html

相关文章:

  • PPL困惑度的计算
  • 使用 NSSM 安装 Tomcat 11.0.6 为 Windows 服务
  • loop对象
  • 根据文件路径获取base64照片
  • 具身智能数据集解析
  • LVGL的核心:lv_timer_handler
  • 【AI入门】CherryStudio入门7:引入魔搭中的MCP服务
  • WDG看门狗(独立看门狗和窗口看门狗)
  • Babylon.js学习之路《二、开发环境搭建与第一个Hello World》
  • Windows11开机后黑屏,且任务管理器点击无反应
  • JGL051厌氧反应加膜生物反应实验装置
  • 数据结构5.0
  • YOLO数据集标注工具LabelImg(打包Exe版本及使用)
  • 请求从发送到页面渲染的全过程
  • 体育数据库:搭建体育应用的核心「数据引擎」
  • PHP:互联网时代的经典编程语言魅力与未来展望
  • 关于大数据的基础知识(一)——定义特征结构要素
  • 人工智能顶会ICLR 2025论文分享│PointOBB-v2:更简单、更快、更强的单点监督有向目标检测
  • 红黑树算法笔记(一)
  • 聚焦边缘 AI 推理,Akamai 发布最新云与 AI 战略
  • 火山引擎火山云主推产品
  • 两根485线支持多少通信协议
  • C++Primerplus编程练习 第六章
  • 操作系统 == 内存管理
  • postgresql 参数wal_level
  • 【计算机网络-数据链路层】以太网、MAC地址、MTU与ARP协议
  • 7:点云处理—眼在手外标定
  • Grafana v10.1.5 升级至最新v12.0.0
  • 18.模方ModelFun设置教程
  • CSdiy java 07