首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL主备同步复制搭建及原理解析

MySQL主备同步复制搭建及原理解析

原创
作者头像
炒香菇的书呆子
发布2024-12-08 23:45:11
发布2024-12-08 23:45:11
7190
举报

引言

MySQL主备同步复制是一种数据库复制技术,用于实现数据的高可用性和负载均衡。在这种架构中,主库(Master)负责处理所有的写操作,而从库(Slave)则负责读操作。通过这种方式,可以显著提升系统的读取性能和数据冗余度。

一、主备同步复制原理

MySQL复制是基于复制源服务器在其二进制日志(binlog)中跟踪对其数据库的所有更改(增、删、改等)。binlog作为从服务器启动那一刻起修改数据库结构或内容的所有事件的书面记录。通常,SELECT不记录语句是因为它们既不修改数据库结构也不修改数据本身。

主备复制流程如下:

  1. 主库节点中每当有数据进行DML操作时,事务会按照binlog格式将DML操作以event的形式写入到主节点的binlog中。DML包括:Insert, Delete, Update等。
  2. 备库节点连接主库节点时,有多少个备节点就会创建多少个binlog dump线程。
  3. 当主库节点的binlog发生变化时,binlog dump线程会通知备节点(若多个备库则通知所有备节点),并将相应的binlog内容推送给备库节点。
  4. 备库节点的I/O thread进程收到binlog后,会将日志包含的内容写入本地中继日志(relay log)。
  5. 备库节点的SQL thread会读取I/O thread写入的relay log并根据relay log中记录的event内容生成相应的DML语句,回放入备库中,完成整个主备复制流程。

二、搭建主备同步复制

1. 配置前置条件

确保主备两台机器上都已安装MySQL,且版本一致。以下是主备库的配置示例:

机器名字

机器IP

主库Master

192.168.0.1

从库Slave

192.168.0.2

2. 配置主服务器(Master)

2.1 修改主库的配置文件

在主库的MySQL配置文件中(通常位于 /etc/my.cnf/etc/mysql/my.cnf),需要启用二进制日志并为主库设置一个唯一的 server-id。在 [mysqld] 部分添加如下配置:

代码语言:ini
复制
[mysqld]
server-id=1                 # 主库的唯一 ID
log-bin=mysql-bin           # 启用二进制日志,主从复制依赖于此
binlog-do-db=your_database  # 需要同步的数据库名称,多个数据库可添加多行
2.2 重启 MySQL 服务

修改配置文件后,需要重启 MySQL 以使配置生效:

代码语言:bash
复制
# Linux 系统
sudo systemctl restart mysqld
2.3 创建用于复制的用户

在主库中创建一个用于复制的用户,并授予 REPLICATION SLAVE 权限。这个用户用于从库连接主库并进行数据同步:

代码语言:sql
复制
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
2.4 获取主库的二进制日志信息

为了让从库知道从何处开始复制数据,主库需要提供当前的二进制日志位置。可以通过以下命令查看:

代码语言:sql
复制
SHOW MASTER STATUS;

3. 配置从服务器(Slave)

3.1 修改从库的配置文件

在从库的MySQL配置文件中(通常位于 /etc/my.cnf/etc/mysql/my.cnf),需要设置从库的 server-id 并指定中继日志的位置。在 [mysqld] 部分添加如下配置:

代码语言:ini
复制
[mysqld]
server-id=2
relay-log=mysql-relay-bin
3.2 重启 MySQL 服务

修改配置文件后,需要重启 MySQL 以使配置生效:

代码语言:bash
复制
# Linux 系统
sudo systemctl restart mysqld
3.3 设置主从关系

在从库上执行以下命令,设置主从关系:

代码语言:sql
复制
CHANGE MASTER TO
    MASTER_HOST='192.168.0.1',
    MASTER_USER='replica_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=0;
3.4 启动复制

启动从库的复制进程:

代码语言:sql
复制
START SLAVE;

4. 监控和维护

4.1 监控复制状态

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

代码语言:sql
复制
SHOW SLAVE STATUS\G
4.2 处理复制延迟
  • 优化网络:确保主从库之间的网络延迟最小。
  • 并行复制:启用从库的并行复制功能。
4.3 故障恢复

在主库发生故障时,可以快速切换到从库继续提供服务,提高了系统的高可用性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 一、主备同步复制原理
  • 二、搭建主备同步复制
    • 1. 配置前置条件
    • 2. 配置主服务器(Master)
      • 2.1 修改主库的配置文件
      • 2.2 重启 MySQL 服务
      • 2.3 创建用于复制的用户
      • 2.4 获取主库的二进制日志信息
    • 3. 配置从服务器(Slave)
      • 3.1 修改从库的配置文件
      • 3.2 重启 MySQL 服务
      • 3.3 设置主从关系
      • 3.4 启动复制
    • 4. 监控和维护
      • 4.1 监控复制状态
      • 4.2 处理复制延迟
      • 4.3 故障恢复
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档