首页 > 数据库 >【MySQL】MySQL 数据库主从复制详解

【MySQL】MySQL 数据库主从复制详解

时间:2024-10-01 13:52:35浏览次数:10  
标签:主从复制 备份 复制 MySQL 服务器 日志 从库 详解

目录

MySQL 数据库的主从复制是一种常用的数据冗余和负载均衡技术,也是一种数据备份和同步的技术。通过将数据从主服务器(Master)复制到一个或多个从服务器(Slave)。这种架构不仅可用于数据备份,还可以提高系统的读性能,通过负载均衡实现更高的可用性。本文将详细介绍 MySQL 主从复制的主从架构、工作原理、配置步骤、监控与维护、备份策略及应用场景。

1. 基本概念

1.1 主从架构

在 MySQL 的主从复制中:

  • 主库:负责处理所有写请求,记录数据变更。
  • 从库:同步主库的数据,可以处理读请求,减轻主库负担。

这种架构通过分布式负载实现更高的性能和可用性。

1.2 复制类型

MySQL 支持多种复制方式:

  • 异步复制:主库提交事务后无需等待从库确认,可能导致数据滞后。
  • 半同步复制:主库等待至少一个从库确认,以减少数据丢失风险。
  • 同步复制:所有从库必须确认后才提交事务,延迟较大。

2. 工作原理

MySQL 主从复制的基本思想是将主数据库上的所有变更操作(如插入、更新、删除)实时地复制到从数据库。具体流程如下:

  1. 主服务器记录所有修改操作到二进制日志(binary log, binlog)。
  2. 从服务器定期从主服务器读取这些日志并执行相应的操作,以保持数据同步。

流程图

记录更改 发送日志 执行更改 主服务器 二进制日志 从服务器 同步数据

2.1 复制过程

  1. 日志记录:主库将所有更改操作记录到二进制日志(binary log)中。
  2. 日志传输:从库定期向主库请求新的二进制日志文件。
  3. 应用更改:从库读取这些日志并执行相应的 SQL 语句,将数据同步到本地数据库。

2.2 主要组件

  • Binary Log(binlog):主库上的二进制日志,记录所有更改。
  • Replication I/O Thread:从库中的线程,负责从主库拉取 binlog。
  • Replication SQL Thread:从库中的线程,负责执行 binlog 中的 SQL 语句。

3. 配置步骤

3.1 准备工作

在设置主从复制之前,需要确保以下条件:

  • 主服务器和从服务器都已安装 MySQL。建议使用相同版本的 MySQL,以避免兼容性问题。
  • 能够网络互通,并且防火墙设置允许相应的 MySQL 端口(默认 3306)通信。

3.2 在主服务器上配置

  1. 修改配置文件

    编辑 MySQL 配置文件(通常为 /etc/my.cnf/etc/mysql/my.cnf),添加以下内容:

    [mysqld]
    server-id=1              # 唯一的服务器 ID
    log-bin=mysql-bin        # 开启二进制日志
    # log_bin = /var/log/mysql/mysql-bin.log
    
  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 创建复制用户

    登录主服务器,创建用于复制的用户并授权:

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  4. 记录当前二进制日志位置

    使用以下命令获取当前的日志文件和位置:

    SHOW MASTER STATUS;
    

    返回结果示例:

    FilePosition
    mysql-bin.00000112345

3.3 在从服务器上配置

  1. 修改配置文件

    编辑从服务器的 MySQL 配置文件,添加以下内容:

    [mysqld]
    server-id=2              # 唯一的服务器 ID,不同于主服务器
    
  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 设置主服务器信息

    登录从服务器,执行以下命令以设置主服务器的信息:

    CHANGE MASTER TO
        MASTER_HOST='主服务器IP',
        MASTER_USER='replicator',
        MASTER_PASSWORD='your_password',
        MASTER_LOG_FILE='记录的File',-- 从主服务器获取的日志文件
        # MASTER_LOG_FILE='mysql-bin.000001', 
        MASTER_LOG_POS=记录的Position; -- 从主服务器获取的位置
        # MASTER_LOG_POS=12345;
    
  4. 启动复制进程

    启动从服务器的复制进程:

    START SLAVE;
    
  5. 检查复制状态

    使用以下命令检查复制状态:

    SHOW SLAVE STATUS\G;
    

    关键字段:

    • Slave_IO_Running: 是否在运行
    • Slave_SQL_Running: 是否在运行
    • Last_Errno: 最近的错误号
    • Last_Error: 最近的错误信息

确保 Slave_IO_RunningSlave_SQL_Running 都是 Yes

4. 监控和维护

4.1 监控复制状态

定期检查从库的复制状态,确保没有错误。使用以下命令:

SHOW SLAVE STATUS\G;

关注 Last_Error 字段,如果有错误,需要及时解决。

4.2 处理复制延迟

复制延迟会导致从库数据不一致。可以通过以下方式减轻延迟:

  • 调整查询语句,优化性能。
  • 使用更高效的硬件,提高 I/O 性能。
  • 考虑使用半同步复制减少延迟。

4.3 故障恢复

如果主库发生故障,可以将从库提升为主库。步骤如下:

  1. 停止从库的复制:

    STOP SLAVE;
    
  2. 记录从库的状态,确保数据一致性。

  3. 在新主库上创建新的复制用户,配置新的从库。

5. 备份策略

5.1 逻辑备份与物理备份

  • 逻辑备份:使用 mysqldump 工具进行数据导出,适合小型数据库。

    mysqldump -u root -p --all-databases > all_databases.sql
    
  • 物理备份:使用 mysqlbackupPercona XtraBackup 进行热备份,适合大规模数据库。

5.2 增量备份

增量备份只备份自上次备份以来发生变化的数据,节省存储空间和时间。在主从复制环境中,从库可以通过 binlog 实现增量备份。

6. 使用场景

  • 负载均衡:通过将读请求分发到多个从库,减轻主库压力。
  • 灾难恢复:在主库故障时迅速切换到从库,确保业务连续性。
  • 数据分析:从库可用于生成报表和数据分析,避免影响主库性能。

7. 注意事项

  1. 网络延迟:主从复制依赖网络传输,可能会出现延迟,导致从服务器的数据与主服务器不一致。

  2. 二进制日志格式:要选择合适的二进制日志格式(如 ROW、STATEMENT、MIXED),以适应不同的使用场景。

  3. 故障恢复:在主服务器故障时,可以手动将从服务器提升为主服务器,确保业务连续性。

  4. 安全性:确保复制用户的权限设置合理,只授予必要的权限;并考虑对数据传输进行加密。

总结

MySQL 主从复制是实现高可用性和负载均衡的重要手段。通过合理配置和监控,可以显著提升数据库的可用性和性能,有效地管理数据同步,实现系统的弹性和鲁棒性。在实际应用中,应根据业务需求和系统架构来合理设计部署方案,并定期监控复制状态,以确保数据的一致性和完整性。了解主从复制的工作原理及其配置过程,对数据库管理员至关重要。希望本文能帮助您深入理解 MySQL 主从复制的相关知识。

参考文献

通过以上内容的整理和优化,希望能够帮助您更好地理解和运用 MySQL 数据库的主从复制功能。


标签:主从复制,备份,复制,MySQL,服务器,日志,从库,详解
From: https://blog.csdn.net/Stromboli/article/details/142651934

相关文章

  • MySQL数据库用户权限控制的实现方法
            控制用户权限在任何数据库管理系统中都是一个重要的需求。合理的权限管理能够保障数据的安全性和完整性。下面我们将讨论如何使用数据库来控制用户的权限,尤其是对于MySQL数据库的具体实现。1.概述权限控制通常涉及到以下几个方面:用户角色:定义不同的用户角......
  • Java项目实战II基于Java+Spring Boot+MySQL的大创管理系统(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者一、前言在当前创新创业氛围浓厚的背景下,大学生创新创业项目(简称“大创”)如雨后春笋般涌现,为校园内外注入了无限活力。然而,项目......
  • Java项目实战II基于Java+Spring Boot+MySQL的免税商品优选购物商城(源码+数据库+文档)
    目录一、前言二、技术介绍三、系统实现四、文档参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者一、前言随着全球贸易的日益繁荣和消费者需求的多样化,免税商品购物已成为众多旅行者和消费者的热门选择。为了提供一个更加便捷......
  • 【编程小白必看】MySQL 聚合函数操作秘籍一文全掌握
    【编程小白必看】MySQL聚合函数操作秘籍......
  • Linux 部署Zookeeper集群详解
    Zookeeper是一个分布式协调服务,它可以用来解决分布式系统中的很多问题,如配置管理、分布式锁、集群管理等。以下是如何在Linux环境下部署Zookeeper集群的详细步骤,以及Zookeeper集群的工作原理和选举原理。Zookeeper集群工作原理Zookeeper集群由一个领导者(Leader)和多个跟随......
  • MySql学习笔记:什么是数据库?
    数据库的概念:         数据库(Database),简而言之可视为数字化的文件柜,是一个长期储存在计算机内有组织的、统一管理的数据集合,用于存储和管理大量相关信息。        数据库是一个按数据的结构来存储和管理数据的计算机系统,也就是说,数据库通常有两方面含义:......
  • 【深入浅出MySQL】「性能调优」高性能查询优化MySQL的SQL语句编写
    总体优化大纲(1)优化查询性能:通过索引降低全表扫描频率提升数据库查询性能的途径时,一个关键的战略就是降低全表扫描的频次。因为全表扫描往往会消耗显著的计算资源,从而导致查询过程变得迟缓且效率低下,为了有效地提高查询的响应速度和整体性能。优化方向那些在where筛选条件和orderby......
  • 详解TCP协议(三次握手四次挥手)
    1.TCP通信时序下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。在这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到网络的......
  • Linux(三)文件管理、复杂操作与实用工具详解
    Linux学习笔记(三)文件管理、复杂操作与实用工具详解Linux学习笔记(二):深入理解用户管理、运行级别与命令行操作1.文件操作的基本操作1.1创建创建目录mkdir:创建目录mkdir/home/dog#创建单级目录mkdir-p/home/animal/tiger#创建多级目录,如果父目录不存在,将连......
  • 虚拟机三种网络模式详解
    在电脑里开一台虚拟机,是再常见不过的操作了。无论是用虚拟机玩只有旧版本系统能运行的游戏,还是用来学习Linux、跑跑应用程序都是很好的。而这其中,虚拟机网络是绝对绕不过去的。本篇文章通俗易懂的介绍了常见的虚拟网络提供的三种网络链接模式NAT、桥接、主机。即使不懂虚拟......