虚拟机搭建
既然要进行主从复制,那么就需要两台虚拟机,并且这两台虚拟机上分别安装了MySQL.
同时要保证两台机器的IP地址是互通的,这样就可以保证MySQL再进行数据交换的时候不会出错.
你只需要配置完毕一台服务器之后,另一台服务器可以直接进行克隆.操作方法如下:
打开VMware WorkStation,然后右击那台你已经配置好的安装好MySQL的虚拟机,然后点击管理,会出现一个克隆
这里二选一都可以,我选的是1
这个位置的话就随你便了,之后等待一段时间,VMware会自动把这个创建好的虚拟机给你添加到虚拟机列表中.
到此为止还没有完成,因为你这台克隆的虚拟机的IP地址一定是和原先那台一样的,所以我们需要进入到ifcfg-ens33文件中进行ip地址的修改.修改为和原先那台机器不一样的IP地址即可.
如果你希望能便于区分两台虚拟机,那么你可以修改一下两台虚拟机的主机名称.
使用hostnamectl set-hostname 新主机名 的方式来进行主机名的修改
修改完毕之后使用init 6 指令进行重启.
到此为止两台MySQL服务器已经配置完毕了.
之后我们就得对Centos7的环境进行配置了,因为要进行主从复制,因此从机会需要访问主机的3306端口,因此我们需要开放出来这个端口给从机使用.
有两种方法,一种是直接关闭防火墙,如果这样那么所有的请求都不会被拦截,当然,这种情况只能使用在你的测试环境中,如果项目上线一定是不能这样子的.
直接关闭防火墙的方法为:
systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld #关闭防火墙的开机自启 systemctl status firewalld #查看防火墙状态
第二种方法就是只开启当前虚拟机的某个端口,那么向这个端口进行访问请求不会被拦截.
当然你设置完毕之后需要重启防火墙
firewall-cmd --zone=public --add-port=3306/tcp --permanent # 开放某个端口 firewall-cmd --reload # 重启防火墙
防火墙问题也解决之后,如果你是直接使用克隆的方式进行的mysql配置,那么你还需要将auto.cnf文件删除
rm /var/lib/mysql/auto.cnf
删除这个文件之后使用指令进行重启
init 6
主库配置
完成了上面防火墙和虚拟机基本的配置之后,就可以进行主库的配置了.
我们首先需要进入到 /etc/my.cnf 中进行配置.
vim /etc/my.cnf
然后添加如下信息
server-id=1 read-only=0
再my.cnf中配置完毕信息之后,都需要进行的是对mysql服务的重启,重启如果失败说明你的配置文件有错误,如果没有报错,那么你配置成功.
systemctl restart mysqld
之后我们需要登录mysql,然后创建一个远程连接的账号,并授予主从复制权限.
mysql -u root -p 密码 # 登录mysql create user 'slaver'@'%' identified with mysql_native_password by 'Slaver@123456'; # 创建用户slaver grant replication slave on *.* to 'slaver'@'%'; # 为从机用户授予权限
但是如果了解过主从复制原理的应该知道,从库会从主库的二进制文件中进行数据的读取.
因此我们需要了解主库的二进制文件的位置,以便之后从库从主库的数据进行读取.
show master status;
输入对应的指令然后查看对应的信息,之后就可以进行从库的配置了.
到此为止,主库的配置已经完成了.
从库配置
要对mysql进行配置,依旧是进入到 /etc/my.cnf 文件中进行配置即可
vim /etc/my.cnf
配置完毕之后重启mysql
systemctl restart mysqld
之后登录进入mysql,然后再从库中设置主库信息
mysql -uroot -p密码
登录成功之后进行主库信息的设置,在从库的mysql中输入如下信息
change replication source to source_host='192.168.146.114', source_user='slaver',source_password='Slaver@123456', source_log_file='binlog.000010',source_log_pos=663;
其中source_host填写的是你的主库的ip地址,source_user填写的是你刚才创建的从库用户的名称,source_password填写的是你刚才设置的从库用户登录密码,source_log_file填写的是使用show master status之后得到的File栏中的binlog文件名称,source_log_pos则填写Postion栏中的数据.这些数据是这样子获得的,如下图
那么你具体应该在控制台输入的信息应该是这样的
之后执行start replica操作将主从复制功能打开.
start replica;
之后在从库再次使用show replica status\G来显示主库的信息
show replica status\G;
如果这里出现的是两个Yes,那么你的主从同步就成功了.
测试
主从同步已经成功了,那么在主库中进行的DDL和DML操作最后都会同步到从库中去.
因此我们先创建一个数据库,并且创建一个表,并向表插入数据.
在登录主库的mysql之后,直接将下面的代码复制进去并执行,然后查看从库,如果从库中的数据也被更新了,那么说明数据同步成功.
create database db01; use db01; create table tb_user( id int(11) primary key auto_increment, name varchar(10) not null, sex varchar(1) )engine=innodb default charset=utf8mb4; insert into tb_user values(null,'Tom','1'),(null,'Jack','0'); select * from tb_user;
在从库中展示数据发现数据已经同步,如果不那么自信,也可以对主库中的数据进行修改之后,再次查询从库中的数据是否也被修改了.
至此,主从复制完成,如有其他问题可以在评论区进行留言,看到了就会帮你解决…