windows下主从复制

1.进入 PHPTutoria\Mysql\bin
创建主服务器 mysqld.exe --install mysqlmaster
启动主服务器 net start mysqlmaster

2.进入 PHPTutoria\Mysql7\bin
创建主服务器 mysqld.exe --install mysqlslave1
启动主服务器 net start mysqlslave1
登陆 mysql.exe -uroot -proot
查看库 show datadbases;

3.进musql\bin
登陆 mysql.exe -uroot -proot
在主里给从一个用户 create user‘cong’@‘%’ identified by ‘123456’;
查看数据库 show databases;
使用mysql库 use mysql;
查看表 show tables;
查询表user里的用户 select * from user;
给从一个最高权限 grant replication slave on . to ‘cong’@‘%‘ identified by ’123456‘;
刷新一下 flush privileges;
退出 quit;
停止并重启 net stop mysqlmaster net start mysqlmaster
登陆从 mysql.exe -ucong -p123456
查看库 show databases;(发现权限不够)
退出 quit;
登陆主 mysql.exe -uroot -p root
使用数据库 use mysql;
给从超级权限 update user set Super_priv=‘Y’ where User=‘cong’;
刷新 flush privilege;
查看主的状态 show master status;记住(mysql-bin.000002 438)

4.到2.步骤里
复制主的东西
change master to
master_host=‘localhost’,
master_user=‘cong’,
master_password=‘123456’,
master_port=3306,
master_log_file=‘mysql-bin.000002’,
master_log_pos=438;
重启从服务器 start slave;
查看从服务器状态 show slave status\G; (有两个yes就是成功了)

5.在大脚丫创建一个链接
链接名:mysqlslave1 端口:3307 用户名:root 密码:root
再创建一个数据库 zhu123
再查一下从服务器状态 show slave status\G;
接下来对主里的表操作 从里也有数据 从表能读能写不能有其他操作
再查一下从服务器状态 show slave status\G; (可以看错误)
遇到错误 修改后需要重启 stop slave; reset slave; start slave;


1.进入 PHPTutoria\Mysql\bin
启动主服务器 net start mysqlmaster
查看状态 show master status;

进入 PHPTutoria\Mysql7\bin
启动主服务器 net start mysqlslave1
查看状态 show slave status\G;

2.在从服务器操作
退出一下 quit;
停止并重启 net stop mysqlslave1 net start mysqlslave1
登陆 mysql.exe -uroot -proot
查看状态 show master status;
给从服务器添加个用户 create user ‘cong’@‘%’ identified by ‘123456’;
修改权限 grant replication slave on . to ‘cong’@‘%‘ ;
刷新 flush privileges;
使用数据库 use mysql;
修改成最该权限 update user set Super_priv=‘Y’ where User=‘slave’;
退出 quit;
登陆 mysql.exe -ucong -p123456
查看库 show databases; (验证cong这个用户添加成功了吗)
退出 quit;
登陆 mysql.exe -uroot -proot
查看主状态 show master status;
退出 quit;
停止并启动 停止并重启 net stop mysqlslave1 net start mysqlslave1

3.在主服务器操作
change master to
master_host=‘localhost’,
master_user=‘cong’,
master_password=‘123456’,
master_port=3307,
master_log_file=‘mysql-bin.000002’,
master_log_pos=1178;
启动从服务 start slave; (两个yes就是成功了)
退出 quit;
停止并启动 停止并重启 net stop mysqlmaster net start mysqlmaster

4.在mysql\my.ini添加
auto_increment_offset=1
auto_increment_increment=2

在mysql7\my.ini添加
auto_increment_offset=2
auto_increment_increment=2
(让id不同)

5.重启主服务器和从服务器

<think>我们正在配置Windows环境下的MySQL主从复制。根据引用内容,配置过程包括主库和从库的配置文件修改、主库创建复制用户、从库设置主库信息等步骤。下面将详细说明配置步骤: 1. **准备两个MySQL实例**:可以在同一台机器上安装两个MySQL服务,使用不同端口(如主库3306,从库3307),或者使用两台机器。 2. **修改主库配置文件(my.ini)**: - 设置`server-id`为唯一值(如1) - 启用二进制日志(`log-bin`) - 指定需要复制的数据库(可选) - 设置`binlog_format`(通常用STATEMENT) - 注意:在MySQL 5.7.4及以后版本,需要设置`sql-mode`(参考引用[2]) 示例主库配置(my.ini): ```ini [mysqld] server-id=1 log-bin=master-bin binlog-do-db=testdb # 需要复制的数据库,不设置则复制所有 binlog-ignore-db=mysql # 忽略复制的数据库 binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog_format=STATEMENT sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ``` 3. **修改从库配置文件(my.ini)**: - 设置`server-id`为另一个唯一值(如2) - 可以指定要复制的数据库(使用`replicate_wild_do_table`,注意引用[2]中说明从库配置方式) - 设置忽略复制的数据库 示例从库配置(my.ini): ```ini [mysqld] server-id=2 port=3307 # 如果同一台机器,需要修改端口 replicate_wild_do_table=testdb.% # 复制testdb数据库的所有表 replicate_wild_ignore_table=mysql.% replicate_wild_ignore_table=information_schema.% replicate_wild_ignore_table=performance_schema.% sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ``` 4. **重启主库和从库服务**:使配置生效。 5. **在主库上创建复制用户**: 登录主库MySQL,执行: ```sql CREATE USER 'slave_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%'; FLUSH PRIVILEGES; ``` 6. **查看主库状态**: 执行: ```sql SHOW MASTER STATUS; ``` 记录返回结果中的`File`(如`master-bin.000001`)和`Position`(如154),从库连接时需要。 7. **配置从库连接主库**: 登录从库MySQL,执行: ```sql CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_PORT=主库端口, MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='主库的File', MASTER_LOG_POS=主库的Position; ``` 例如(参考引用[4][5]): ```sql CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=154; ``` 8. **启动从库复制**: 在从库执行: ```sql START SLAVE; ``` 9. **检查从库状态**: 执行: ```sql SHOW SLAVE STATUS\G ``` 查看`Slave_IO_Running`和`Slave_SQL_Running`是否都为`Yes`,如果是,则配置成功。 注意:如果遇到错误,请检查防火墙设置(确保主从端口互通)、主库创建的复制用户权限是否正确、主库状态中的位置信息是否正确等。 §§相关问题§§ 1. 如何解决主从复制中出现的“Slave_IO_Running: Connecting”问题? 2. MySQL主从复制中binlog_format有几种模式?各有什么优缺点? 3. 如何监控MySQL主从复制的延迟?</think>### Windows下MySQL主从复制配置指南 以下是Windows环境下配置MySQL主从复制的完整步骤: #### 一、准备工作 1. **安装两个MySQL实例** - 主库(Master):默认端口3306 - 从库(Slave):建议使用不同端口(如3307) - 可通过复制安装目录并修改配置实现[^3] 2. **网络要求** - 确保主从服务器网络互通(同机器使用`127.0.0.1`) - 开放防火墙端口(默认3306) #### 二、主库配置(Master) 1. 修改`my.ini`文件: ```ini [mysqld] server-id=1 # 唯一ID log-bin=master-bin # 启用二进制日志 binlog-do-db=testdb # 需复制的数据库 binlog-ignore-db=mysql # 忽略复制的系统库 binlog-ignore-db=information_schema binlog_format=STATEMENT # 日志格式 sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # 兼容配置[^2] ``` 2. 重启主库服务: ```bash net stop MySQL net start MySQL ``` 3. 创建复制用户: ```sql CREATE USER 'slave_user'@'%' IDENTIFIED BY 'Slave@123'; GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%'; FLUSH PRIVILEGES; ``` 4. 查看主库状态: ```sql SHOW MASTER STATUS; ``` 记录 **File** (如`master-bin.000002`) 和 **Position** (如`154`)[^4][^5] #### 三、从库配置(Slave) 1. 修改`my.ini`文件: ```ini [mysqld] server-id=2 # 不同于主库 port=3307 # 修改端口 replicate_wild_do_table=testdb.% # 复制指定库 replicate_wild_ignore_table=mysql.% # 忽略系统库[^2] relay-log=slave-relay-bin read_only=ON # 从库只读 ``` 2. 重启从库服务: ```bash net stop MySQL_Slave net start MySQL_Slave ``` 3. 配置主从连接: ```sql CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='slave_user', MASTER_PASSWORD='Slave@123', MASTER_LOG_FILE='master-bin.000002', # 主库记录的File MASTER_LOG_POS=154; # 主库记录的Position[^4][^5] ``` 4. 启动复制: ```sql START SLAVE; SHOW SLAVE STATUS\G # 检查状态 ``` 验证关键参数: - `Slave_IO_Running: Yes` - `Slave_SQL_Running: Yes` - `Seconds_Behind_Master: 0` #### 四、测试验证 1. 在主库创建数据: ```sql USE testdb; CREATE TABLE test_tb(id INT); INSERT INTO test_tb VALUES(1); ``` 2. 在从库查询数据: ```sql SELECT * FROM testdb.test_tb; # 应返回主库插入的数据 ``` #### 五、常见问题解决 1. **连接失败** - 检查防火墙是否放行端口 - 确认`master_user`有远程连接权限 - 验证主库IP是否正确 2. **主从数据不一致** - 检查`binlog-do-db`和`replicate_wild_do_table`配置是否匹配 - 确认主库`SHOW MASTER STATUS`的Position值是否更新 3. **复制中断** - 执行`STOP SLAVE; START SLAVE;`重启复制进程 - 检查错误日志`SHOW SLAVE STATUS\G`中的`Last_Error` > 提示:生产环境建议使用`ROW`格式的binlog以减少数据冲突[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值