Winows下搭建主从复制

41 阅读4分钟

之前windows环境已经搭建了一台mysql服务器,那么既然要搭建主从复制自然要在搭建一台服务器,主服务器命名为master,从服务器命名为slave1

新建一个目录,复制第一台服务器文件到该目录,修改my.ini文件内容如下,启动server-id是唯一的不能重复,同一台服务器上端口号也修改一下

[mysql]
#default-character-set=utf8
[mysqld]
#设置3307端口  
port = 3307
# 设置mysql的安装目录
basedir=F:\\mysql_slave_1\\mysql-8.2.0-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:\\mysql_slave_1\\mysql-8.2.0-winx64\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集  ,mysql8不能设置utf8
#character-set-server=utf8
# 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB

server-id=2
#启用中继日志
relay-log=mysql-relay

同样以管理的身份打开命令行窗口,进入安装的bin目录

mysqld.exe --install m2 --defaults-file=F:\mysql_slave_1\mysql-8.2.0-winx64\my.ini

执行一下这个命令,其中m2为服务的名称,因为master节点创建的时候服务名称叫mysql了,这里为了不重复起另外一个别名

然后执行net start m2报错

因为还没有完成初始化操作。应该执行mysqld --initialize --console这个命令完成初始化操作,执行该命令报错

The designated data directory F:\test_20231027\mysql-8.2.0-winx64\data\ is unusable. You can remove all files that the server added to it.

我这边先是把data目录里文件删除,试一下没好,然后删除整个data目录试一下没好,然后反复执行该命令几次就好了

然后中net start m2成功

但是执行mysql -uroot -p命令登录服务器一直报错

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),密码不正确,但是密码是复制出来不可能出错。试了好多次之后我尝试输了一下master服务的密码结果登录上了,很奇怪,明明一直都是slave的目录下操作的,猜测可能是同一台服务器启动2台mysql服务,服务器识别不出来,又或者是环境变量没有配置

mysql -P3307 -uroot -p通过指定端口号成功,注意第一个P是大写。然后就可以通过客户端工具登录服务器了。

紧接着修改master节点的my.ini文件

[mysql]
# 设置mysql客户端默认字符集,mysql8不能设置utf8
#default-character-set=utf8
[mysqld]
#设置3306端口  
port = 3306
# 设置mysql的安装目录
basedir=F:\\test_20231027\\mysql-8.2.0-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:\\test_20231027\\mysql-8.2.0-winx64\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集  ,mysql8不能设置utf8
#character-set-server=utf8
# 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB

#开启日志
log_bin=F:\\test_20231027\\mysql-8.2.0-winx64\\logs\\mysql-bin.log
log_error=F:\\test_20231027\\mysql-8.2.0-winx64\\logs\\mysql.err
long_query_time=0.1
slow_query_log=ON
slow_query_log_file=F:\\test_20231027\\mysql-8.2.0-winx64\\logs\\mysql-slow.log
general_log=ON
general_log_file=F:\\test_20231027\\mysql-8.2.0-winx64\\logs\\logmysql.log
server-id=1

#启用二进制日志
log-bin=txmysql-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=db1
#设置binlog格式,MIXED,ROW,STATEMENT
binlog_format=STATEMENT

master节点创建数据库db1,表t_student,slave创建建数据库db1,表t_student,当然你也可以通过建表来测试主从同步。客户端工具master节点执行下面命令

#创建用户
CREATE USER 'slave'@'localhost' IDENTIFIED BY '123456';localhost 为从服务器地址

#授权用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'localhost';

SHOW MASTER STATUS; 

slave节点客户端工具执行

#master_host 主数据库地址
CHANGE MASTER TO MASTER_HOST ='127.0.0.1',
#上一步中主数据库创建的从库用户
MASTER_USER ='slave',
#上一步中主数据库创建的从库密码
MASTER_PASSWORD ='123456',
#上一步中保存的file
MASTER_LOG_FILE ='txmysql-bin.000006',
#端口号
MASTER_PORT=3306,
#上一步中保存的position
MASTER_LOG_POS = 157;

START SLAVE
STOP SLAVE
SHOW SLAVE STATUS

Slave_IO_Running、Slave_SQL_Running都为Yes就大功告成了

起初

Slave_IO_Running一直显示connecting,同一台服务器网络肯定是通的,要仔细排查MASTER_LOG_FILE ='txmysql-bin.000006',和MASTER_LOG_POS,以及my.ini配置文件。修改完以后一定要重启服务然后,检查MASTER_LOG_FILE和MASTER_LOG_POS

测试