Windows环境下MySQL主从复制搭建全步骤(超详细实操版)

 更新时间:2026年02月09日 09:25:22   作者:Leo July  
MySQL支持主数据库与从数据配置,采用此配置的数据库,MySQL会自动将主数据库中的数据同步到从数据库中,这篇文章主要介绍了Windows环境下MySQL主从复制搭建详细实操的相关资料,需要的朋友可以参考下

前言:

MySQL主从复制是数据库高可用、读写分离架构的基础,核心作用是实现主库数据的实时同步,保障数据备份与服务容错。本文针对Windows环境(Win10/Win11),从环境准备到测试验证,完整拆解主从复制的搭建流程,同时梳理常见问题排查方案,适合数据库初学者或需要快速落地部署的开发人员。

本文测试环境:
系统:Windows 10 专业版
MySQL版本:8.0.36(主从库版本需一致,避免兼容性问题)
架构:1主1从(单主多从架构可复用此步骤扩展)

一、环境准备

1.1 核心前提

  • 两台Windows主机(或一台主机通过多实例部署,新手推荐两台物理机/虚拟机,降低配置难度),确保网络互通(可通过ping命令测试)。

  • 主从机均安装相同版本的MySQL(推荐8.0+,5.7版本步骤类似,配置项略有差异)。

  • 关闭防火墙或开放MySQL默认端口3306(避免端口拦截导致同步失败)。

1.2 主机规划

角色IP地址MySQL端口
主库(Master)192.168.1.1003306
从库(Slave)192.168.1.1013306

二、主库(Master)配置

2.1 找到MySQL配置文件

MySQL在Windows环境下的配置文件默认是 my.ini,位置通常在:

  • 安装目录下(如:D:\Program Files\MySQL\MySQL Server 8.0\my.ini)
  • 若未找到,可通过“服务”查看MySQL服务的可执行路径,找到对应配置文件(右键MySQL服务→属性→可执行文件路径)。

2.2 修改主库my.ini配置

在[mysqld]节点下添加/修改以下配置(注意:配置项需顶格写,不能有空格前缀):

# 主库唯一标识(必须为1-2^32-1的整数,主从库不能重复)
server-id=1
# 开启二进制日志(主从复制的核心,记录所有数据变更操作)
log-bin=mysql-bin
# 二进制日志格式(推荐ROW模式,只记录数据行变更,避免SQL模式的兼容性问题)
binlog-format=ROW
# 需要同步的数据库(可指定多个,用逗号分隔;不指定则同步所有库,除了忽略的库)
binlog-do-db=test_db
# 不需要同步的数据库(系统库必须忽略,避免权限问题)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 二进制日志过期时间(避免日志文件过大,单位:天)
expire_logs_days=7
# 确保每次事务提交时都刷新二进制日志到磁盘(保证数据一致性)
sync-binlog=1

2.3 重启主库服务

配置修改后需重启MySQL服务生效,两种方式:

  1. 图形化方式:控制面板→管理工具→服务→找到“MySQL”→右键“重启”。

  2. 命令行方式(管理员权限打开CMD):
    net stop MySQL(停止服务)
    net start MySQL(启动服务)

注意:若重启失败,大概率是my.ini配置有误(如语法错误、路径错误),需检查配置文件并修正后重新尝试。

2.4 主库创建同步账号并授权

从库需要通过专门的账号连接主库进行数据同步,因此需在主库创建授权账号:

  1. 登录主库MySQL(命令行或可视化工具如Navicat):
    mysql -u root -p(输入root密码登录)

  2. 创建同步账号并授权(MySQL 8.0+语法):
    CREATE USER 'slave_user'@'%' IDENTIFIED BY 'Slave@123456';(slave_user为用户名,%表示允许所有IP连接,密码需符合MySQL密码策略)
    GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';(授予复制权限)
    FLUSH PRIVILEGES;(刷新权限生效)

2.5 查看主库状态(关键步骤)

登录主库后执行以下命令,记录输出结果(后续配置从库需用到):

SHOW MASTER STATUS;

输出示例:

FilePositionBinlog_Do_DBBinlog_Ignore_DB
mysql-bin.000001156test_dbmysql,information_schema,…

关键参数说明:- File:当前二进制日志文件名(如mysql-bin.000001)-
Position:当前二进制日志位置(如156),从库将从这个位置开始同步

注意:执行完此命令后,不要在主库执行任何写操作(如插入、更新数据),否则Position值会变化,导致后续同步失败。

三、从库(Slave)配置

3.1 修改从库my.ini配置

同样找到从库的my.ini文件,在[mysqld]节点下添加/修改以下配置:

# 从库唯一标识(必须与主库不同,如2)
server-id=2
# 开启中继日志(从库通过中继日志同步主库数据,避免直接操作主库日志)
relay-log=mysql-relay-bin
# 中继日志格式(与主库保持一致)
relay-log-format=ROW
# 需要同步的数据库(与主库binlog-do-db一致)
replicate-do-db=test_db
# 不需要同步的数据库(与主库一致)
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
# 从库只读(避免从库被误写,仅对非super权限用户生效)
read-only=1
# 允许super权限用户执行写操作(方便后续维护,如手动同步数据)
super-read-only=0

3.2 重启从库服务

同主库重启方式,确保配置生效。

3.3 配置从库连接主库

登录从库MySQL,执行以下命令配置主从连接(替换为实际主库信息):

CHANGE MASTER TO
MASTER_HOST='192.168.1.100',  # 主库IP地址
MASTER_PORT=3306,             # 主库MySQL端口
MASTER_USER='slave_user',     # 主库创建的同步账号
MASTER_PASSWORD='Slave@123456',# 同步账号密码
MASTER_LOG_FILE='mysql-bin.000001',  # 主库SHOW MASTER STATUS输出的File值
MASTER_LOG_POS=156;             # 主库SHOW MASTER STATUS输出的Position值

注意:若之前配置过主从,需先执行STOP SLAVE;RESET SLAVE ALL;清除原有配置,再执行上述CHANGE MASTER TO命令。

3.4 启动从库同步进程

执行以下命令启动从库同步:

START SLAVE;

3.5 查看从库同步状态(核心验证)

执行以下命令查看从库同步状态:

SHOW SLAVE STATUS\G;

重点关注以下两个参数(均为Yes则说明同步配置成功):

  • Slave_IO_Running: Yes:从库IO线程正常(负责连接主库,读取主库二进制日志)

  • Slave_SQL_Running: Yes:从库SQL线程正常(负责执行中继日志中的SQL语句,同步数据)

输出示例(关键部分):

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 156
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 320

四、主从复制测试验证

通过在主库执行数据操作,验证从库是否能正常同步:

4.1 主库操作

# 1. 创建同步数据库(若已存在可跳过)
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
# 2. 创建测试表
CREATE TABLE IF NOT EXISTS user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  age INT
);
# 3. 插入测试数据
INSERT INTO user (name, age) VALUES ('张三', 25), ('李四', 30);

4.2 从库验证

登录从库MySQL,执行以下命令查看数据是否同步:

USE test_db;
# 查看表结构
DESC user;
# 查看数据(应与主库一致)
SELECT * FROM user;

若从库能查询到主库插入的数据,说明主从复制搭建成功!

五、常见问题排查

5.1 Slave_IO_Running: No

  • 主库IP/端口错误:检查CHANGE MASTER TO中的MASTER_HOST和MASTER_PORT是否正确,可通过ping主库IP、telnet 主库IP 3306测试网络连通性。

  • 同步账号密码错误:验证slave_user账号密码是否正确,可在从库用mysql -h 主库IP -u slave_user -p测试登录。

  • 主库二进制日志文件名/位置错误:重新执行主库的SHOW MASTER STATUS,确认MASTER_LOG_FILE和MASTER_LOG_POS是否正确,若错误需重新执行CHANGE MASTER TO命令修正。

  • 主库防火墙未开放3306端口:在主库Windows防火墙中添加入站规则,允许3306端口通行。

5.2 Slave_SQL_Running: No

  • 主从库数据不一致:比如主库已存在表,从库无此表,导致同步SQL执行失败。解决:停止从库同步(STOP SLAVE;),手动在从库补全缺失的数据/表结构,然后重新启动同步(START SLAVE;)。

  • 从库存在重复主键:主库插入的数据在从库已存在,导致主键冲突。解决:删除从库中冲突的数据,或修正主从数据一致性后重启同步。

  • SQL_MODE不兼容:主从库SQL_MODE设置不同,导致某些SQL语句在从库无法执行。解决:统一主从库的SQL_MODE配置(在my.ini中添加sql_mode=xxx,保持一致)。

5.3 主库重启后同步失败

原因:主库重启后,二进制日志文件名可能变化(如从mysql-bin.000001变为mysql-bin.000002)。

解决:重新在主库执行SHOW MASTER STATUS,记录新的File和Position,然后在从库执行STOP SLAVE; → 重新执行CHANGE MASTER TO命令(更新MASTER_LOG_FILE和MASTER_LOG_POS)→ START SLAVE;。

六、总结

Windows环境下MySQL主从复制搭建的核心步骤可概括为:

  1. 主从库配置文件修改(核心是server-id和日志配置);
  2. 主库创建同步账号并授权;
  3. 从库配置主库信息并启动同步;
  4. 验证同步状态和数据一致性。

只要严格遵循步骤,注意主从库的一致性和网络连通性,就能顺利完成搭建。若需实现多从库架构,可复用从库配置步骤,为每个从库分配唯一的server-id即可。

到此这篇关于Windows环境下MySQL主从复制搭建全步骤的文章就介绍到这了,更多相关MySQL主从复制搭建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 修改mysql默认字符集的两种方法详细解析

    修改mysql默认字符集的两种方法详细解析

    下面小编就为大家介绍两种修改mysql默认字符集的方法。需要的朋友可以过来参考下
    2013-08-08
  • 修改MySQL的默认密码的四种小方法

    修改MySQL的默认密码的四种小方法

    对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,下文中就教给大家如何修改MySQ的默认密码。
    2015-09-09
  • mysql中varchar类型的日期进行比较、排序等操作的实现

    mysql中varchar类型的日期进行比较、排序等操作的实现

    在mysql使用过程中,日期一般都是以datetime、timestamp等格式进行存储的,但有时会因为特殊的需求或历史原因,日期的存储格式是varchar,那么应该怎么进行比较和排序等问题,本文就来介绍一下
    2021-11-11
  • 深入探究MySQL中使用where 1=1是否存在性能影响

    深入探究MySQL中使用where 1=1是否存在性能影响

    最近在项目中使用 mybatis 写 SQL 使用了 where 1=1 来简化多条件拼接的写法,案例如下,借此聊聊多条件拼接的常见的一些写法以及 where 1=1 是否存在性能影响,需要的朋友可以参考下
    2024-02-02
  • Mysql8主从复制解读(兼容低高版本)

    Mysql8主从复制解读(兼容低高版本)

    文章详细介绍了MySQL主从复制的理论知识、必要前提、实现原理、binlog的三种类型以及主从同步的具体步骤,通过配置主库和从库的MySQL配置文件,并创建用于主从同步的用户,可以实现主从复制,最后,文章还讨论了主从同步的验证和故障切换的方法
    2025-02-02
  • MySQL备份与恢复之冷备(1)

    MySQL备份与恢复之冷备(1)

    这篇文章主要介绍了MySQL备份与恢复之冷备,冷备一般需要定制计划,比如什么时候做备份,每次对哪些数据进行备份等等,对冷备感兴趣的小伙伴们可以参考一下
    2015-08-08
  • mysql group by having 实例代码

    mysql group by having 实例代码

    mysql中group by语句用于分组查询,可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表, 经常和having一起使用,需要的朋友可以参考下
    2016-11-11
  • MySQL 读写分离的实现逻辑及步骤详解

    MySQL 读写分离的实现逻辑及步骤详解

    文章介绍了MySQL读写分离的架构、实现步骤、可能遇到的问题及解决方案,并总结了优化点,以提高MySQL数据库的性能和可扩展性,感兴趣的朋友一起看看吧
    2025-02-02
  • MYSQL中SWITCH语句和循环语句举例详解

    MYSQL中SWITCH语句和循环语句举例详解

    MySQL提供了多种循环语句来实现循环操作,其中包括while循环、loop循环、repeat循环和非标准的goto循环,下面这篇文章主要给大家介绍了关于MYSQL中SWITCH语句和循环语句的相关资料,需要的朋友可以参考下
    2024-06-06
  • MySQL实现数据更新的示例详解

    MySQL实现数据更新的示例详解

    这篇文章主要为大家详细介绍了MySQL实现数据更新的相关资料,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论