前言:
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.100 | 3306 |
| 从库(slave) | 192.168.1.101 | 3306 |
二、主库(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服务生效,两种方式:
图形化方式:控制面板→管理工具→服务→找到“mysql”→右键“重启”。
命令行方式(管理员权限打开cmd):
net stop mysql(停止服务)net start mysql(启动服务)
注意:若重启失败,大概率是my.ini配置有误(如语法错误、路径错误),需检查配置文件并修正后重新尝试。
2.4 主库创建同步账号并授权
从库需要通过专门的账号连接主库进行数据同步,因此需在主库创建授权账号:
登录主库mysql(命令行或可视化工具如navicat):
mysql -u root -p(输入root密码登录)创建同步账号并授权(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;
输出示例:
| file | position | binlog_do_db | binlog_ignore_db |
|---|---|---|---|
| mysql-bin.000001 | 156 | test_db | mysql,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主从复制搭建的核心步骤可概括为:
- 主从库配置文件修改(核心是
server-id和日志配置); - 主库创建同步账号并授权;
- 从库配置主库信息并启动同步;
- 验证同步状态和数据一致性。
只要严格遵循步骤,注意主从库的一致性和网络连通性,就能顺利完成搭建。若需实现多从库架构,可复用从库配置步骤,为每个从库分配唯一的server-id即可。
到此这篇关于windows环境下mysql主从复制搭建全步骤的文章就介绍到这了,更多相关mysql主从复制搭建内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论