windows系统下mysql主从数据库部署

1. windows系统下mysql主从复制部署

注意:主从数据库版本需要一致,否则同步可能会失败
2. 主库配置
2.1 找到MySQL配置文件

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

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

2.2 修改主库my.ini配置

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

bash 复制代码
# 主库唯一标识(必须为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"→右键"重启"。

注意:若重启失败,大概率是my.ini配置有误(如语法错误、路径错误),需检查配置文件并修正后重新尝试。
2.4 主库创建同步账号并授权

打开Navicat数据库客户端管理软件,如图所示创建同步账号并授权

bash 复制代码
CREATE USER 'test_db'@'%' IDENTIFIED BY 'test_db123456';(aoi_user为用户名,%表示允许所有IP连接,密码需符合MySQL密码策略)
GRANT REPLICATION SLAVE ON *.* TO 'test_db'@'%';(授予复制权限)
FLUSH PRIVILEGES;(刷新权限生效)
bash 复制代码
#给用户赋值所有权限(可选择)
GRANT ALL ON *.* TO 'test_db'@'%';

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

在Navicat输入SHOW MASTER STATUS;如图所示

关键参数说明:- File:当前二进制日志文件名(如mysql-bin.000001)-

Position:当前二进制日志位置(如4347),从库将从这个位置开始同步

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

3. 从库配置
3.1 修改从库my.ini配置

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

bash 复制代码
# 从库唯一标识(必须与主库不同,如2)
server-id=2
# 开启中继日志(从库通过中继日志同步主库数据,避免直接操作主库日志)
relay-log=mysql-relay-bin
# 需要同步的数据库(与主库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

3.2 重启从库服务

同主库重启方式,确保配置生效。
3.3 配置从库连接主库

打开Navicat连接从库,输入如下语句,如图所示

bash 复制代码
STOP SLAVE; #停止从库
RESET SLAVE ALL;#重置原有配置

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

START SLAVE;#重启从库

注意:若之前配置过主从,需先执行STOP SLAVE;和RESET SLAVE ALL;清除原有配置,再执行上述CHANGE MASTER TO命令。
3.4 查看从库同步状态(核心验证)

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

bash 复制代码
SHOW SLAVE STATUS;

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

  • Slave_IO_Running: Yes:从库IO线程正常(负责连接主库,读取主库二进制日志)
  • Slave_SQL_Running: Yes:从库SQL线程正常(负责执行中继日志中的SQL语句,同步数据)

4. 主从复制测试验证

通过在主库执行数据操作,验证从库是否能正常同步。如插入、更新或者删除数据
5. 删除auto.cnf文件

主从MySQL下的数据(data)目录下有个文件auto.cnf,文件中定义了uuid,要保证主从数据库实例的uuid不一样,建议直接删除掉,重启服务后将会重新生成。

6. 常见问题排查
6.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端口通行。

6.2 Slave_SQL_Running: No

  • 主从库数据不一致:比如主库已存在表,从库无此表,导致同步SQL执行失败。解决:停止从库同步(STOP SLAVE;),手动在从库补全缺失的数据/表结构,然后重新启动同步(START SLAVE;)。
  • 从库存在重复主键:主库插入的数据在从库已存在,导致主键冲突。解决:删除从库中冲突的数据,或修正主从数据一致性后重启同步。
  • SQL_MODE不兼容:主从库SQL_MODE设置不同,导致某些SQL语句在从库无法执行。解决:统一主从库的SQL_MODE配置(在my.ini中添加sql_mode=xxx,保持一致)。

6.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;。

7. 提取binlog日志文件段落

在安装目录下打开CMD,如图所示

输入如下语句,输出对应时间断的数据库操作行为

bash 复制代码
mysqlbinlog --start-datetime="2026-02-23 14:00:00" --stop-datetime="2026-02-23 23:59:59" ../data/mysql-bin.000002 -r D:/output.sql

8. 跳过指定数量的事务

c 复制代码
slave stop;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; #跳过一个事务
slave start;

9. 查看binlog同步具体错误语句

在从库使用show slave status语句中查找Exec_Master_Log_Pos字段值 ,如图所示

bash 复制代码
-- 步骤1:先不指定FROM,查看binlog事件概览,获取准确的position
SHOW BINLOG EVENTS IN 'mysql-bin.000001' LIMIT 5;
--再具体查询
SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 178 LIMIT 10;
相关推荐
V1ncent Chen18 分钟前
SQL大师之路 13 聚合函数和分组
数据库·sql·mysql·数据分析
赵渝强老师18 分钟前
【赵渝强老师】高斯数据库(openGauss)的体系架构
数据库·postgresql·opengauss·gaussdb·国产数据库
IvorySQL44 分钟前
开源同行,感谢有你|IvorySQL 社区邀您领取贡献者证书
数据库·postgresql·开源
IvorySQL1 小时前
PostgreSQL 技术日报 (3月19日)|当 AI 代理开始批量创建数据库
数据库·postgresql·开源
mldlds1 小时前
mysql9.0windows安装
windows·adb
2401_874732531 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
l1t1 小时前
与系统库同名python脚本文件引起的奇怪错误及其解决
开发语言·数据库·python
未佩妥剑,已入江湖1 小时前
docker Windows下安装
运维·windows·docker·容器
星空露珠2 小时前
迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
开发语言·数据库·算法·游戏·lua
IpdataCloud2 小时前
指纹浏览器为什么要自建IP检测?基于IP数据云离线库的架构实践
数据库·网络协议·tcp/ip·架构·edge浏览器