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

MySQL 主从复制

数据的高可用性、读写分离以及数据备份是至关重要的需求。MySQL 作为一款广泛使用的开源关系型数据库,其主从复制功能为解决这些问题提供了有效的方案。本文将详细介绍 MySQL 主从复制的原理、搭建步骤以及实际应用。

一、MySQL 主从复制原理

1.1 基本概念

MySQL 主从复制是一种将主数据库(Master)的数据复制到一个或多个从数据库(Slave)的过程。主数据库负责处理所有的写操作,而从数据库则接收主数据库的更新并同步数据,主要用于处理读操作。

1.2 复制过程

二进制日志记录:主数据库会将所有的写操作记录到二进制日志(Binary Log)中。这些日志包含了对数据库进行修改的 SQL 语句,是复制的基础。

中继日志传输:从数据库通过 IO 线程连接到主数据库,并请求主数据库发送二进制日志。主数据库接收到请求后,会将二进制日志发送给从数据库,从数据库将接收到的日志存储在中继日志(Relay Log)中。

SQL 语句执行:从数据库的 SQL 线程会读取中继日志中的内容,并在本地执行这些 SQL 语句,从而实现数据的同步。

1.3 复制模式

异步复制:主数据库在执行完写操作后,不会等待从数据库确认就返回结果。这种模式下,主从数据库之间的复制延迟可能会比较大,但对主数据库的性能影响较小。

半同步复制:主数据库在执行完写操作后,会等待至少一个从数据库确认接收到中继日志后才返回结果。这种模式可以减少数据丢失的风险,但会增加主数据库的响应时间。

二、MySQL 主从复制搭建步骤

2.1 环境准备

两台或多台安装了 MySQL 数据库的服务器。

确保服务器之间可以相互通信,并且防火墙允许 MySQL 端口(默认 3306)的流量通过。

2.2 配置主数据库

编辑主数据库的配置文件 my.cnf,添加以下配置:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database_name

server-id 是服务器的唯一标识,log-bin 开启二进制日志,binlog-do-db 指定需要复制的数据库。

重启 MySQL 服务:

systemctl restart mysql

创建用于复制的用户并授予权限:

CREATE USER 'replication_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;

查看主数据库的二进制日志信息:

SHOW MASTER STATUS;

记录下 File 和 Position 的值,后续配置从数据库时会用到。

2.3 配置从数据库

编辑从数据库的配置文件 my.cnf,添加以下配置:

[mysqld]
server-id = 2

确保 server-id 与主数据库不同。

重启 MySQL 服务:

systemctl restart mysql

配置从数据库连接到主数据库:

CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.xxxxxx',
MASTER_LOG_POS=xxxxxx;

将 master_host_ip 替换为主数据库的 IP 地址,mysql-bin.xxxxxx 和 xxxxxx 替换为主数据库 SHOW MASTER STATUS 命令中记录的 File 和 Position 的值。

启动从数据库的复制进程:

START SLAVE;

检查从数据库的复制状态:

SHOW SLAVE STATUS\G

确保 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,表示复制正常运行。

三、MySQL 主从复制的应用场景

3.1 读写分离

在高并发的应用场景中,将读操作分发到从数据库,写操作集中在主数据库,可以显著提高系统的性能和可扩展性。例如,电商网站的商品展示页面可以从从数据库读取数据,而用户下单等写操作则在主数据库上执行。

3.2 数据备份与恢复

从数据库作为主数据库的副本,可以在主数据库出现故障时快速切换到从数据库,实现数据的备份和恢复。同时,定期对从数据库进行备份,也可以进一步提高数据的安全性。

3.3 数据的异地容灾

将从数据库部署在不同的地理位置,可以实现异地容灾。当主数据库所在地区发生自然灾害或网络故障时,位于其他地区的从数据库仍然可以正常提供服务,保障业务的连续性。

相关文章:

  • 二叉树的所有路径(回溯算法基础)
  • 蓝牙耳机开发--TWS蓝牙耳机双向通信充电盒设计
  • 滑动窗口模板
  • 《系统分析师-第三阶段—总结(六)》
  • Android Studio学习记录1
  • 软件测试全流程与主流测试方法详解:从理论到实战
  • Rabbitmq下载和安装(Windows系统,百度网盘)
  • 云服务器被黑客攻击应急响应与加固指南(上)
  • Swiper 在 Vue 中的使用指南
  • 用Python做有趣的AI项目5:AI 画画机器人(图像风格迁移)
  • Atcoder Help 有关Atcoder 的介绍-1 涨分规则
  • docker安装Canal1.1.5,MySQL5.7踩坑
  • 企业架构之旅(2):解锁TOGAF ADM
  • OpenCV-Python (官方)中文教程(部分一)_Day16
  • MicroPython for ESP32 舵机控制详解
  • 【学习笔记】软件测试流程-测试设计阶段
  • 全地形车市场
  • FPGA-DDS信号发生器
  • watch 监视器
  • 【大语言模型开发】BPE算法(Byte-Pair)
  • 一回合摘下“狮心”,张名扬霸气回应观众:再嘘一个我听听
  • 首映|马丽:真想抱抱臧姑娘,对她说辛苦了
  • 又双叒叕出差太空了!神二十成功出发,神十九乘组扫榻以待
  • 巴基斯坦召开国家安全委员会紧急会议,应对印方连环举措
  • 牛市早报|特朗普称或将“大幅降低”对华关税,外交部回应
  • 中国体育报:中国乒协新周期新起点再出发