问题重现
在做尚硅谷的瑞吉外卖项目时,视频用的是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';
这里的selaveName和password 可以修改成自己的,不修改也行
刷新:
FLUSH PRIVILEGES;
然后执行:
show master status;
执行后会显示如下界面:
将上图中对应的File和Position记录下,因为一会儿会用到,至此主机配置完成——接下来尽量不要去操作主机数据库,那可能会导致上面记录的数值改变。
从机
配置文件
同样在
\etc\mysql\mysql.conf.d\mysqld.cnf
在[mysqld]下面添加
# 从机的id,没有特别要求,但是要与主机不同
server-id=2
注意:
如果你的从机是克隆而来的,记得更改从机的静态ip和uuid,静态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;
在上面这条语句中,除了汉字的部分要更改,其中File和Position就是在主机执行"select master status;"语句后让记录的File和Position——对应的是日志名和偏移量
随后执行
start slave;
启动主从复制,然后可以执行
show slave status\G;
来输出主从复制信息,查看是否成功。
当显示如下信息时表示主从复制连接成功,在主库执行操作,从库会根据日志记录执行相应操作
意外情况及分析
Slave_IO_State一直处于Connecting
如图,这个问题当时困扰了好几个小时,正如上文所说,起初是因为对文件等不了解,但是后来随着了解加深,我确信我的配置文件没有问题,但是他还是一直处于该状态,这时可以从以下几点入手:
主从系统之间是否网络通信正常——通过牌ping命令互相ping一下,有一次就是突然主机ping不通
防火墙是否关闭——重点
很多人可能都会忘了关闭防火墙,在主从系统如果没有重要信息,只是用于学习的虚拟机,其实还可以永久关闭防火墙:
# 关闭防火墙
systemctl stop firewaldd
# 查看防火墙状态
systemctl status firewalld
# 禁用防火墙
systemctl status firewalls
是否从机是克隆机,uuid有没有修改
可以查看一下主机的master状态
show master status;
有可能是因为主机的二进制文件和偏移量发生了改变,导致连接不上
Slave_IO_State一直处于No
该状态我比较少见,很有可能是忘了关闭防火墙
重启MysSQL
可能是配置文件配好了但是没有重启
总结
综上,有时候一个BUG的原因可能是小细节的问题,讲的并不是很全——比如主机的配置可以设定绑定固定数据库等,有需求的可以额外去了解。
希望对你有帮助!!!