在 Windows 上的 MySQL 8.4.3 和 WSL(Ubuntu)的 MySQL 8.0.40 之间配置 主从同步(Master-Slave Replication) 的过程略有不同,因为两者的 MySQL 版本和环境存在差异。以下是详细步骤,帮助你完成跨平台的主从复制配置。
📝 前提条件
- 主服务器(Master):Windows 上的 MySQL 8.4.3
- 从服务器(Slave):WSL Ubuntu 上的 MySQL 8.0.40
- 确保主从服务器之间网络可以互相访问。
🚀 步骤 1:在主服务器(Windows MySQL 8.4.3)上配置
📌 1. 修改 MySQL 配置文件
-  打开 my.ini文件,路径通常为:C:\ProgramData\MySQL\MySQL Server 8.4\my.ini
-  添加或修改以下配置: [mysqld] server-id=1 log-bin=mysql-bin binlog-format=row- server-id=1:主服务器的唯一标识。
- log-bin=mysql-bin:启用二进制日志。
- binlog-format=row:推荐的二进制日志格式。
 
-  保存配置文件后,重启 MySQL 服务: net stop mysql net start mysql
📌 2. 创建复制用户
在主服务器上,登录 MySQL 并创建一个用于复制的用户:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
📌 3. 获取二进制日志信息
运行以下命令,获取主服务器的二进制日志文件名和位置:
SHOW BINARY LOG STATUS;
示例输出:
+------------------+----------+
| Log_name         | Position |
+------------------+----------+
| mysql-bin.000001 | 154      |
+------------------+----------+
记下 Log_name 和 Position 的值。
🚀 步骤 2:在从服务器(WSL MySQL 8.0.40)上配置
📌 1. 修改 MySQL 配置文件
-  在 WSL Ubuntu 中,编辑 my.cnf文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
-  添加或修改以下配置: [mysqld] server-id=2 relay-log=relay-log- server-id=2:从服务器的唯一标识。
- relay-log=relay-log:启用中继日志。
 
-  保存并退出,然后重启 MySQL 服务: sudo systemctl restart mysql
📌 2. 配置主从同步
登录从服务器的 MySQL:
mysql -u root -p
执行以下命令,设置主服务器的信息:
CHANGE REPLICATION SOURCE TOSOURCE_HOST='your_master_ip',SOURCE_USER='replica_user',SOURCE_PASSWORD='your_password',SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=154;
- your_master_ip:主服务器的 IP 地址(Windows 的本地 IP 地址)。
- replica_user和- your_password:主服务器上创建的复制用户和密码。
- mysql-bin.000001:主服务器的二进制日志文件名。
- 154:主服务器的二进制日志位置。
📌 3. 启动从服务器的复制
在从服务器上执行以下命令:
START REPLICA;
🚀 步骤 3:验证主从同步状态
📌 在从服务器上检查复制状态
在从服务器上执行:
SHOW REPLICA STATUS\G;
检查以下关键字段:
| 字段 | 说明 | 
|---|---|
| Replica_IO_Running | 应为 Yes | 
| Replica_SQL_Running | 应为 Yes | 
| Last_Error | 应为空 | 
如果 Replica_IO_Running 和 Replica_SQL_Running 都是 Yes,说明主从复制已正常运行。
✅ 步骤 4:测试主从同步
📌 在主服务器上创建一个测试数据库
在主服务器上执行:
CREATE DATABASE test_db;
📌 在从服务器上验证
在从服务器上执行:
SHOW DATABASES;
如果你在从服务器上看到了 test_db,说明主从复制已成功。
🛠 常见问题排查
| 问题 | 解决方法 | 
|---|---|
| 无法连接主服务器 | 确保主服务器的防火墙允许从服务器的 IP 访问 MySQL 端口 | 
| Replica_IO_Running: No | 确认主服务器的 IP 地址和用户权限设置正确 | 
| 从服务器显示错误日志 | 检查 SHOW REPLICA STATUS\G的Last_Error字段 | 
🔧 防火墙配置(Windows)
如果 Windows 防火墙阻止了 WSL 的访问,需要允许 MySQL 3306 端口的入站流量:
New-NetFirewallRule -DisplayName "Allow MySQL 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow
🎯 总结
| 主服务器 | 从服务器 | 
|---|---|
| Windows MySQL 8.4.3 | WSL MySQL 8.0.40 | 
| server-id=1 | server-id=2 | 
| SHOW BINARY LOG STATUS; | SHOW REPLICA STATUS\G; | 
| 使用 CHANGE REPLICATION SOURCE TO替代旧的CHANGE MASTER TO命令 | 
#主库
SHOW BINARY LOG STATUS;CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;SHOW PLUGINS;#从库
SELECT VERSION();CHANGE REPLICATION SOURCE TOSOURCE_HOST='192.168.110.206',SOURCE_USER='root',SOURCE_PASSWORD='root',SOURCE_LOG_FILE='KONG-bin.000016',SOURCE_LOG_POS=15597;#启动io
START REPLICA;
#查看状态
SHOW REPLICA STATUS;#停止io
STOP REPLICA IO_THREAD;select * from s_sys_user;