Windows 上设置 MySQL 的主从复制

Windows 上设置 MySQL 的主从复制

  • 一、前言
    • [1. 环境准备](#1. 环境准备)
    • [2. 主服务器配置](#2. 主服务器配置)
    • [3. 从服务器配置](#3. 从服务器配置)
    • [6. 测试复制](#6. 测试复制)
    • [7. 注意事项](#7. 注意事项)

一、前言

MySQL 主从复制可以在程序中通过以下方式应用:

  1. 读写分离:将写操作(如插入、更新、删除)发送到主服务器,将读操作(如查询)发送到从服务器。这可以减轻主服务器的负担,并提高读性能。

  2. 数据备份:从服务器可以用于定期备份主服务器的数据。因为从服务器会持续同步主服务器的数据,备份从服务器比备份主服务器更轻松。

  3. 故障恢复:在主服务器出现故障时,可以将从服务器提升为新的主服务器,减少系统停机时间。

  4. 负载均衡:将负载分散到多个从服务器,提高整体系统的吞吐量和可靠性。

在程序中实现这些功能通常需要配置数据库连接池或ORM框架,支持读写分离。例如,在Spring Boot中,你可以通过配置多个数据源和相应的路由策略来实现。

1. 环境准备

  1. 安装 MySQL

    确保你在 Windows 上安装了 MySQL,并且能够访问 MySQL 命令行工具。

  2. 确定主从服务器

    假设我们有两台机器:

    • 主服务器(Master):192.168.1.100
    • 从服务器(Slave):192.168.1.101

2. 主服务器配置

  1. 编辑 MySQL 配置文件

    找到 my.ini 文件,通常位于 C:\ProgramData\MySQL\MySQL Server X.X\(X.X为版本号)。添加或修改以下参数:

    ini 复制代码
    [mysqld]
    server-id = 1
    log-bin = mysql-bin
    binlog-do-db = your_database_name  # 如果只想复制特定数据库
    • server-id:主服务器的唯一标识符,必须是一个正整数。
    • log-bin:启用二进制日志,这对于复制是必需的。
    • binlog-do-db:可选,指定要复制的数据库。
  2. 重启 MySQL 服务

    可以通过服务管理器或命令提示符重启 MySQL 服务。

  3. 创建复制用户

    连接到 MySQL 命令行,执行以下命令:

    sql 复制代码
    CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
    FLUSH PRIVILEGES;
    • 这个用户将用于从服务器连接到主服务器。
  4. 获取主服务器状态

    在 MySQL 命令行中执行:

    sql 复制代码
    SHOW MASTER STATUS;

    记录结果中的 FilePosition 字段,以便在从服务器上使用。

3. 从服务器配置

  1. 编辑从服务器的 MySQL 配置文件

    找到从服务器的 my.ini 文件,添加或修改以下参数:

    ini 复制代码
    [mysqld]
    server-id = 2
    • server-id:从服务器的唯一标识符,必须与主服务器不同。
  2. 重启从服务器的 MySQL 服务

  3. 连接到从服务器

    打开 MySQL 命令行,执行以下命令:

    sql 复制代码
    CHANGE MASTER TO
        MASTER_HOST='192.168.1.100',
        MASTER_USER='replica',
        MASTER_PASSWORD='replica_password',
        MASTER_LOG_FILE='mysql-bin.000001',  -- 使用从主服务器获取的 File
        MASTER_LOG_POS=12345;                 -- 使用从主服务器获取的 Position
    • 替换 MASTER_LOG_FILEMASTER_LOG_POS 为你在主服务器上记录的值。
  4. 启动复制

    执行以下命令启动复制:

    sql 复制代码
    START SLAVE;
  5. 检查复制状态

    输入以下命令检查复制状态:

    sql 复制代码
    SHOW SLAVE STATUS
    • 确保 Slave_IO_RunningSlave_SQL_Running 都显示为 Yes,这表示复制正在正常运行。

6. 测试复制

  1. 在主服务器上创建一些数据:

    sql 复制代码
    USE your_database_name;
    CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
    INSERT INTO test_table VALUES (1, 'test_name');
  2. 在从服务器上查询该表:

    sql 复制代码
    USE your_database_name;
    SELECT * FROM test_table;

    你应该能看到在主服务器上插入的数据。

7. 注意事项

  • 防火墙设置:确保主从服务器之间的网络连接正常,防火墙不会阻止 MySQL 的端口(默认是 3306)。
  • 数据一致性:在配置复制之前,确保主从服务器的数据一致性。可以通过备份和恢复的方式来确保这一点。
  • 监控复制状态:定期检查从服务器的复制状态,以确保没有错误发生。

通过以上步骤,你应该能够成功在 Windows 上设置 MySQL 的主从复制。如有问题,请查看 MySQL 错误日志以诊断问题。

相关推荐
廿一夏1 小时前
MySql存储引擎与索引
数据库·sql·mysql
敲个大西瓜4 小时前
Java项目常用数据归档方式
mysql
kyriewen6 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室6 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿6 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试
小江的记录本7 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
木心术18 小时前
Windows系统下MySQL与AI工具集成方案:数据存储与调用实践
人工智能·windows·mysql
这个DBA有点耶8 小时前
SQL改写实战:子查询、CTE、窗口函数性能对比
数据库·mysql·性能优化
beyond阿亮8 小时前
Hermes Agent快速接入 QQ 完整教程|QQ聊天使用AI智能体
人工智能·windows·ai·openclaw·hermes agent
小江的记录本8 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven