Ubuntu虚拟机MySQL实现主从复制

问题重现

在做尚硅谷的瑞吉外卖项目时,视频用的是CentOs系统,而我因为一直用的是ubuntu,并且已经配置了好久所以不愿意再去换CentOS,也因此出现了一大堆错误——首先我对Ubuntu并不是很熟悉,所以MySQL的配置文件路径就已经找了很久,其次是配置顺序等

配置流程(适用于MySQL8.0.30和Ubuntu20.04LTS)

主机

配置文件

Ubuntu需要在

\etc\mysql\mysql.conf.d\mysqld.cnf

路径下的主机配置文件中,在[mysqld]下面添加

# 主机唯一标识
server-id=1
# 二进制日志文件路径
bin-log=mysql-bin

添加之后记得执行

systemctl restart mysql

重启MySQL让配置文件生效

MySQL内部配置

主库与从库之间需要一个拥有权限的通信用户来进行数据的沟通——就好像话事人、媒婆一样

GRANT REPLICATION SLAVE ON *.* TO 'slaveName'@'%' IDENTIFIED BY 'password';

这里的selaveNamepassword 可以修改成自己的,不修改也行

刷新:

FLUSH PRIVILEGES;

然后执行:

show master status;

执行后会显示如下界面:

将上图中对应的File和Position记录下,因为一会儿会用到,至此主机配置完成——接下来尽量不要去操作主机数据库,那可能会导致上面记录的数值改变。

从机

配置文件

同样在

\etc\mysql\mysql.conf.d\mysqld.cnf

[mysqld]下面添加

# 从机的id,没有特别要求,但是要与主机不同
server-id=2

注意:

如果你的从机是克隆而来的,记得更改从机的静态ipuuid,静态IP的配置可以自行更改,但也不要和主机相同,uuid可以在数据库使用

select uuid();

生成uuid.

更改配置文件后记得重启MySQL

MySQL内部操作

可以先行执行

stop slave;
reset slave;

暂停从机原来的任务——如果有的话

接下来执行的代码需要填入自己的信息,模板如下:

change master to master_host='主机ip' , master_user='主机创建的通信用户',master_password='创建通信用户时的密码',master_log_file='File',master_log_pos=Position;

在上面这条语句中,除了汉字的部分要更改,其中FilePosition就是在主机执行"select master status;"语句后让记录的File和Position——对应的是日志名和偏移量

随后执行

start slave;

启动主从复制,然后可以执行

show slave status\G;

来输出主从复制信息,查看是否成功。

当显示如下信息时表示主从复制连接成功,在主库执行操作,从库会根据日志记录执行相应操作

意外情况及分析

Slave_IO_State一直处于Connecting

如图,这个问题当时困扰了好几个小时,正如上文所说,起初是因为对文件等不了解,但是后来随着了解加深,我确信我的配置文件没有问题,但是他还是一直处于该状态,这时可以从以下几点入手:

  1. 主从系统之间是否网络通信正常——通过牌ping命令互相ping一下,有一次就是突然主机ping不通

  1. 防火墙是否关闭——重点

很多人可能都会忘了关闭防火墙,在主从系统如果没有重要信息,只是用于学习的虚拟机,其实还可以永久关闭防火墙:

# 关闭防火墙
systemctl stop firewaldd
# 查看防火墙状态
systemctl status firewalld
# 禁用防火墙
systemctl status firewalls
  1. 是否从机是克隆机,uuid有没有修改

  1. 可以查看一下主机的master状态

show master status;

有可能是因为主机的二进制文件和偏移量发生了改变,导致连接不上

Slave_IO_State一直处于No

该状态我比较少见,很有可能是忘了关闭防火墙

重启MysSQL

可能是配置文件配好了但是没有重启

总结

综上,有时候一个BUG的原因可能是小细节的问题,讲的并不是很全——比如主机的配置可以设定绑定固定数据库等,有需求的可以额外去了解。

希望对你有帮助!!!

猜你喜欢

转载自blog.csdn.net/weixin_53811934/article/details/129245547