一、什么是Mysql主从

Mysql主从是一种特殊的Mysql集群方案

一个主(Master)多从(Slave),主负责写操作,从负责读操作,从库的数据从主库同步复制,这样的集群模式就主从同步 。主从复制MySql自己就能完成,我们需要做一些配置即可。主从同步的优点是减轻读的压力,如果主库的写并发比较高或者为了解决主库单点故障,可用做成多个主库,多个主库相互复制,这样即提高了主库写的并发能力,也解决了单节点故障问题。

二、Mysql主从同步的原理

一句话,基于Mysql的binlog1、主库Master开启binlog日志,Mysql会把所有写操作(增删改)写入到binlog中2、主库Master会开启一个log dump 现成,用来给从库Slave的IO线程传binlog3、从库Slave的IO线程去请求主库的binlog,并将得到的binlog日志写到中继日志(relaylog)中4、从库Slave的sql线程,会读取relaylog文件中的日志,并解析成具体操作,执行操作,从而和主库Master的数据保持一致

三、本地搭建主从库

1、前期准备工作

安装好mysql8停止mysql8服务

2、搭建主库和从库

进入mysql安装目录,如果不记得mysql的安装目录,可以进入任务管理器,找到mysql服务,右键打开服务 ctrl+ f搜索mysql,右键属性 复制可执行的文件路径 defaults-file前面是mysql的安装目录,后面是mysql的数据目录和服务的名称

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80

进入mysql的安装目录,复制两份,分别命名为master(主库)和slave(从库),作为主库和从库的安装包 进入mysql的数据目录,复制两份,分别命名为masterdata(主库的数据)和slavedata(从库的数据),注意复制的是MySQL Server 8.0 进入masterdata(主库的数据)和slavedata(从库的数据)的Data目录,删除auto.conf文件,因为这个里面是服务的唯一id,用来标识服务的,所以不能相同,我们后面运行服务的时候就会自动生成 进入masterdata(主库的数据)和slavedata(从库的数据)修改my.ini配置文件需要修改几个地方

【client】中的port 端口号 【mysqlId】中的port 端口号 【mysqlId】中的basedir,mysql安装路径 【mysqlId】中的datadir,mysql数据路径 【mysqlId】中的server-id,mysql服务id master的配置文件,server-id没有截到,不重复即可,port随意制定,两个port要一致,并且不被占用即可。

slave的配置同理

启动master服务

进入master的bin(C:\Program Files\MySQL\master\bin)目录,cmd执行,master就是启动后服务的名称,file就是my.ini所在的路径 【注意】my.ini在mysql安装目录和数据目录都有,这里的是mysql数据目录的那一个,也就是我们改的那一个

mysqld --install master --defaults-file=“C:\ProgramData\MySQL\masterdata\my.ini”

【提示】如果出现install/remove of the service denied 权限不足 以管理身份运行cmd.exe(在电脑搜索那里搜索cmd,点击或者右键以管理员身份运行,然后执行cd C:\Program Files\MySQL\master\bin 切换到mysql的安装目录)

启动成功后,可以看到任务管理中已经有master服务,且是正在运行 【注意】如果不是正在运行,右键master服务,点击打开服务,搜索master,并右键打开即可打开navicat尝试连接,可以发现连接成功 slave的步骤同master,这里就不再赘述

授权Slave使用账号及权限

在master的连接中,执行以下命令

CREATE USER ‘用户名’@‘master的ip,如果是本地,直接用localhost’ IDENTIFIED BY ‘密码’; GRANT REPLICATION SLAVE ON . TO ‘用户名’@‘master的ip’;

【注意】mysql8创建用户和授予权限是分开写的,以前可以写成一个sql创建成功后就可以在mysql库中的user表看到刚创建的用户

slave的后续配置

在master中执行以下命令,得到File和Position

show master status;

得到File和Position

在slave中执行以下命令

change master to master_host=‘master的ip’, #master IP master_user=‘上一步授权给slave的账号’, #master通过GRANT授权的账号 master_password=‘授权账号的密码’, #master通过GRANT授权的密码 master_port=3307, #master数据库的端口 master_log_file=‘上面得到的File’, #master数据库中通过show master status显示的File名称 master_log_pos=上面得到的Position #master数据库的通过show master status显示的Position的值

slave中启动同步

start slave;

slave中主从同步检查

show slave status;

【注意】Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,才表明状态正常

至此,mysql主从同步已经搭好,在master做的写操作都会同步到slave中

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: