- 实现 window 环境下 Mysql 为主机 master,Centos 环境下 MySQL 为从机 slavel
- 当前演示为一主一从的简单配置,一主多从同样可以参照。
- Centos 版本为 7
- MySQL 版本为 5.7.25 和 5.7.16
1. 准备工作
-
首先需要确定Mysql版本,根据测试,5.7大版本一致,具体版本不一致不会导致配置失败。
-
分别关闭 window 环境和 centos 环境的防火墙
- window:控制面板 ==》 系统安全 ==》 防火墙 ==》左侧,启动或关闭防火墙
- centos:
systemctl status firewalld
systemctl stop firewalld
- 使用 SQLYog 工具分别连接两个数据库
2. 主机设置
-
找到 window 本机 Mysql 安装目录下的 my.ini,此文件为 window 环境下 mysql 的配置文件,在
[mysqld]
下添加配置#不一定非得为1,目的是区分和从机的关系 server-id=1 # mysql 主从复制的本地binlog日志位置,不要和 mysql安装路径一致,mysqlbin为文件,不需要创建,只需要创建data文件夹即可 log-bin=D:\MysqlSlavel\data\mysqlbin # 设置忽略复制的库 binlog-ignore-db=mysql # 设置要复制的库 binlog-do-db=slavel_1128 # 设置logbin格式,默认为STATEMENT binlog_format=STATEMENT
-
设置完成保存,找到mysql服务,重启,如若能重启成功,则代表主机配置成功
3. 从机设置
-
同样方式,找到mysql的配置文件,修改,在
[mysqld]
下添加配置`vim /etc/my.cnf`
server-id = 2 relay-log=mysql-relay
-
保存退出,重启服务
systemctl restart mysqld systemctl status mysqld
4. 配置主从关系
-
在 Windows 主机上建立帐户并授权 slave
GRANT REPLICATION SLAVE ON *.* TO 'username'@'从机器数据库IP' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'slavel_demo'@'%' IDENTIFIED BY 'root';
- 需要创建一个用户,不要使用root用户,权限过大
-
查询 master 状态
show master status;
-
查询出的结果,需要将 File 和 Position 字段记住,从机需要配置
-
其中 Binlog_Do_DB 就是刚才 window 环境配置的需要复制的数据库名称
- 执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
-
在 Linux 从机上配置需要复制的主机
MASTER_HOST='主机IP',MASTER_USER='username',MASTER_PASSWORD='password', MASTER_LOG_FILE='File名字',MASTER_LOG_POS=Position数字; # 主机ip:如果当前虚拟机为nat模式,那么主机ip可以设置为当前号段 .1,192.168.xxx.1 # MASTER_USER,MASTER_PASSWORD:刚刚主机创建的用户 # MASTER_LOG_FILE,MASTER_LOG_POS : 上一步主机查询出的结果
- 启动从服务器复制功能
start slave;
-
检查是否配置成功
show slave status\G
-
其中,一下两个属性为 YES 即配置成功
Slave_IO_Running: Yes Slave_SQL_Running: Yes
-
如果有 No,继续向下看,有具体的报错信息,相应修改即可
-
-
验证
- window 创建 一个库,库名为刚才设置的mysql的库的名称
- 创建成功之后,通过 SQLYog 连接 Linux MYSQL ,查看从库是否也创建成功
- 如果创建成功,继续创建表,添加数据,查询是否从库也有更新
5. 断开主从配置
-
停止主从复制功能
stop slave;
-
重新配置主从
stop slave; reset master;