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;
相关推荐
谁刺我心1 小时前
MySQL数据库从win导出成_db.sql复制到linux
数据库·mysql
知识分享小能手2 小时前
PostgreSQL 入门学习教程,从入门到精通,PostgreSQL 16 (Windows) 安装与核心语法实战指南(2)
数据库·学习·postgresql
清水白石0082 小时前
模板方法模式全解析:用抽象基类定义算法骨架,让子类优雅填充细节
数据库·python·算法·模板方法模式
@insist1232 小时前
软考-数据库系统工程师-计算机存储层次结构与性能优化核心知识点
大数据·jvm·数据库
脱发的老袁2 小时前
【数据库】Oracle手动清理归档日志
数据库·oracle
ZPC82102 小时前
docker 入门2
java·linux·数据库
beijingliushao2 小时前
03-数据库和数据表的基本操作
数据库
xiaoliuliu123452 小时前
treeNMS-1.7.5部署步骤详解(附Java环境准备与数据库配置)
java·开发语言·数据库
数据知道2 小时前
MongoDB 更新操作符 `$set` 与 `$unset`:精准修改字段与删除字段
数据库·mongodb