MySQL主从同步

我的配置:MySQL 8.0,Centos 7(主机),Windows 10(从机)

第一步:查看binlog是否开启

MySQL8.0开始,默认开启binlog,如果是5.7的版本,也可以在my.cnf/my.ini中进行配置开启。

show variables like '%log_bin%';
主机

从机

在这里插入图片描述

第二步:设置配置文件

主机

Linux下的MySQL的配置文件默认在/etc/my.cnf,使用vim命令进行编辑

vim /etc/my.cnf

在[mysqld]下配置信息,注意是[mysqld]下,如果配置到其他地方会导致读取不到。

这里的binlog-do-db可以不配置,根据需求来。

从机

Windows下的MySQL配置文件默认在C:\Program Files\MySQL下,打开my.ini进行编辑

同样,在[mysqld]下配置信息

在这里插入图片描述

第三步:重启服务

主机

Linux下MySQL重启命令

systemctl restart mysqld.service

在这里插入图片描述

从机

打开cmd先输入net stop mysql,然后再输入net start mysql

net stop mysql
net start mysql

在这里插入图片描述

第四步:设置账号

主机

通常,主从同步业务场景,是给予从库一个账号,正常是不会给予root账号的,这里我先使用我之前创建的账号zhku进行演示(你也可以使用root账号,但不建议)。

先查看该账户是否具有主从同步的权限

select Repl_slave_priv, Repl_client_priv from mysql.user where user = 'zhku';

在这里插入图片描述

显示没有赋予该权限

赋予权限

grant replication slave, replication client on *.* to 'zhku'@'%';

第五步:查看状态

主机
查看master状态
show master status;

在这里插入图片描述

file:表示同步的bin-log信息从哪个文件开始;

position:表示从file的哪个位置开始;

binlog_do_db:表示同步哪一个库(如果在配置文件中没有设置,则是空)

从机
在从机上设置主服务器IP地址
change master to master_host='120.***.***.110',master_port=3306,master_user='zhku',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=156;

这里设置master_host为主机的IP地址,master_user为登录用户,如zhku,设置master_password为密码,这里我的密码是123456,master_log_file为主机上查看master status的file,master_log_pos为主机上查看到的position。

开启slave
start slave;
查询slave状态
show slave status;

在这里插入图片描述

结果太多,我这里以列显示好看一点。

可以看到最关键的两个参数,倒数两个,Slave_IO_Running和Slave_SQL_Running,显示Yes则代表成功实现主从同步,第一个Slave_IO_State也显示正在等待主机发送事件信息。

到此为止就配置成功了!

遇到的问题

第一个问题:在第三步重启服务时启动失败

原因是配置文件有问题,需要检查配置文件是否配置正确,如单词拼写,数据库是否存在等。

第二个问题:在第五步时从机查看slave status时,Slave_IO_Running显示Connecting

在这里插入图片描述

原因:可以继续查看后面的列,找到Last_IO_Error列

在这里插入图片描述

查看里面的报错显示的是Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.。

在这里插入图片描述

前往主机查询

在这里插入图片描述

发现zhku账号与root账号的plugin值不同,需要将zhku账号的plugin值修改为mysql_native_password(使用update语句,这里不再赘述),修改后即可成功显示两个YES。

这里也有可能报错信息不是这个问题,该列显示connecting的问题主要有三个,一个是网络问题,一个是账号密码不对,一个是master_log_file和master_log_pos设置不对。网络问题的话可以检查防火墙是否开启,笔者这里使用的是阿里云服务器,服务器上打开了安全组,Centos上打开了防火墙端口,所以可以访问,如果是虚拟机则要看桥接模式等,这里不再赘述。

Linux上打开,关闭,查看防火墙的博文链接:

https://blog.csdn.net/weixin_45930241/article/details/123219592

第三个问题:在第五步时从机查看slave status时,Slave_IO_Running显示No

在这里插入图片描述

同第二个问题,查询后面的信息列,看看报错原因是什么

在这里插入图片描述

发现显示文件名字不一致

show master status;

在从机上使用show master status命令查看

在这里插入图片描述

在主机上使用show master status命令查看

在这里插入图片描述

比对发现,File和Position不一致。

使用stop slave命令停掉从机的slave,回到第五步,重新使用change master命令设置,最后再start slave即可,如果还不行,就再去检查两个机器的配置文件是否修改正确。

stop slave;
Logo

更多推荐