【数据库】关于MySQL Server 8.0版本的主从关系搭建 (win-win) (win-mac)
由于选修的mysql数据库作业要求搭建局域网下两台电脑数据库的主从关系,在查阅资料的过程中发现网上的很多攻略里的代码已经被mysql 8.0认为是无效输入,踩了很多坑最后终于搭好了。现在把我的搭建过程贴在这里供大家查阅。
1.环境准备
1.1 网络配置
首先需要我们通过热点或其他形式将主从机连接到同一个局域网上,并查看主从机的ip地址以备后面使用
Windows查看ip地址
win键+R
cmd打开命令行
输入ipconfig
查看返回的状态中ipv4地址后面的一串数字
Mac查看ip地址
打开“系统偏好设置”->“网络(偏好设置)”
1.2 主机配置
系统:Windows10 & Mac
平台:MySQL Server 8.0
主机ip:192.168.43.225
填写自己主机ip
1.3 从机配置
系统:Windows10 & Mac
平台:MySQL Server 8.0
从机ip:192.168.43.197
填写自己从机ip
1.4 注意事项
主从机数据库版本尽可能一致(Mac-Win可以忽略)
关于几个代码中用到的参数,每次连接局域网可能结果不一,注意及时查看或重置
所有涉及修改数据库文件的操作结束以后记得重启数据库
2.配置文件修改
2.1主机操作
2.1.1 查看数据库日志记录bin-log开启状态
在mysql终端界面中输入show variables like 'log_bin';
显示如下即表明bin-log文件已开启
若显示OFF,则参考2.1.1.1开启bin-log服务
2.1.1.1 开启bin-log
win - 修改my.ini文件
在C盘点击显示隐藏文件
找到Program Data->MySQL->MySQL Server 8.0->my.ini文件
在my.ini里面的[mysqld]下面加一行
log-bin=‘电脑名-bin’,这个电脑名去C盘windows->temp里面找,类似这样的:DESKTOP-COKHA31
保存退出,重启数据库即可
这个有坑,如果上面方法不行建议百度bin-log在win下如何开启
Mac - 增加my.cnf文件
应该是默认开启的,不过我还是做了一遍保险
command+空格打开全局搜索
输入/etc进入文件夹
创建一个my,cnf文件,内容复制这里的
可以在桌面新建一个.txt文件再修改后缀为.cnf后移入,也可以用终端touch直接在这个文件夹里创建my.cnf
在空白的my.cnf里面粘贴下面的代码,如果不能使用的话,搜my.cnf文件内容就可以找到类似的代码,很多部分都是注释,其实都是一样的
https://blog.csdn.net/terry_water/article/details/17888113
检查[mysqld]下面有没有log-bin=mysql-bin这一行,如果没有,加上
2.1.2 设置server-id
也在上面说的那个文件里面,修改server-id的值,
从机上面也可以如法炮制,保证主从机的server-id不一样即可。
2.1.3 为从机创建用户并授予权限
这个是最坑的,因为这个时候授权不当就会导致后面一直显示connecting,而网上很多解决方案输入代码后又一直提示语法错误,所以大概是mysql 8.0的SSL版本带来了一些麻烦,而且一些旧版语句被删除了。
先重置一下主服务器
reset master;
创建用户
create user 'ycjl'@'%' identified with 'mysql_native_password' by '123456';
格式:create user '用户名'@'从机IP地址或%表示全部' identified with 'mysql_native_password' by '自定义密码';
grant replication slave on *.* to 'ycjl'@'%';
给从机赋予权限
格式:grant replication slave on *.* to '用户名'@'从机IP';
flush privileges;
刷新权限
注意一定要加 with 'mysql_native_password'
,踩了一晚上的坑好不容易找到还能用的授权语句
查看状态的代码
查看数据库里现有的用户以及状态
select user,host,plugin,authentication_string from user \G
注意第二个账户才是有效的,plugin需要是mysql_native_password,否则对于mysql8.0来说会权限不足
2.2从机操作
2.2.1 添加relay-log
在从机上也找到或新建上面说的my.ini或my.cnf
在[mysqld]处加一句
主机是Mac:relay-log = mysql-relay
主机是Win:relay-log = 从机电脑名-bin.000001
注意:从机电脑最好要初始化reset slave;
删除旧的log文件才能从000001开始
2.2.2 输入代码,创建主机对应slave
change master to
master_host='主机的ip',
master_user='主机上创建的用户名',
master_password='主机上设置的密码',
master_log_file='查1',
master_log_pos=查2;
最后一项没有引号!
关于查1查2:
在主机上show master status;
即可查看
可以先在主机上初始化一下masterreset master;
2.2.3 启动slave并查看状态
start slave;
show slave status \G
如果显示这两项都为yes,那么我们的主从关系就搭建成功啦
当然鉴于这个大坑的奇妙之处,可能也会有
显示No或者Running很多其他的bug出现,可以搜索状态表中的错误代码查找对应解决方案,不过大致流程就是这样啦。
3具体使用
连接成功后,在主机上增删改数据库,从机上都可以看到相应的改动,初级的主从配置就是这样,进阶如控制从机只能访问哪个数据库等问题请搜索其他大佬回答~
欢迎关注微信公众号 两叶君 LeavesInPairs
985计科专业学生党的日常资料分享
情怀少年写写画画的地方