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;
