• MySQL主从复制(基于Centos7)


    虚拟机搭建

    既然要进行主从复制,那么就需要两台虚拟机,并且这两台虚拟机上分别安装了MySQL.
    同时要保证两台机器的IP地址是互通的,这样就可以保证MySQL再进行数据交换的时候不会出错.
    MySQL8安装教程基于Centos7
    Centos7配置IP地址
    你只需要配置完毕一台服务器之后,另一台服务器可以直接进行克隆.操作方法如下:
    打开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 #查看防火墙状态
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    第二种方法就是只开启当前虚拟机的某个端口,那么向这个端口进行访问请求不会被拦截.
    当然你设置完毕之后需要重启防火墙

    firewall-cmd --zone=public --add-port=3306/tcp --permanent # 开放某个端口
    firewall-cmd --reload # 重启防火墙
    
    • 1
    • 2

    防火墙问题也解决之后,如果你是直接使用克隆的方式进行的mysql配置,那么你还需要将auto.cnf文件删除

    rm /var/lib/mysql/auto.cnf
    
    • 1

    删除这个文件之后使用指令进行重启

    init 6
    
    • 1

    主库配置

    完成了上面防火墙和虚拟机基本的配置之后,就可以进行主库的配置了.
    我们首先需要进入到 /etc/my.cnf 中进行配置.

    vim /etc/my.cnf
    
    • 1

    然后添加如下信息

    server-id=1
    read-only=0
    
    • 1
    • 2

    在这里插入图片描述
    再my.cnf中配置完毕信息之后,都需要进行的是对mysql服务的重启,重启如果失败说明你的配置文件有错误,如果没有报错,那么你配置成功.

    systemctl restart mysqld
    
    • 1

    之后我们需要登录mysql,然后创建一个远程连接的账号,并授予主从复制权限.

    mysql -u root -p 密码 # 登录mysql
    create user 'slaver'@'%' identified with mysql_native_password by 'Slaver@123456'; # 创建用户slaver
    grant replication slave on *.* to 'slaver'@'%'; # 为从机用户授予权限
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    但是如果了解过主从复制原理的应该知道,从库会从主库的二进制文件中进行数据的读取.
    因此我们需要了解主库的二进制文件的位置,以便之后从库从主库的数据进行读取.

    show master status;
    
    • 1

    在这里插入图片描述
    输入对应的指令然后查看对应的信息,之后就可以进行从库的配置了.
    到此为止,主库的配置已经完成了.

    从库配置

    要对mysql进行配置,依旧是进入到 /etc/my.cnf 文件中进行配置即可

    vim /etc/my.cnf
    
    • 1

    在这里插入图片描述
    配置完毕之后重启mysql

    systemctl restart mysqld
    
    • 1

    之后登录进入mysql,然后再从库中设置主库信息

    mysql -uroot -p密码
    
    • 1

    登录成功之后进行主库信息的设置,在从库的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;
    
    • 1
    • 2
    • 3

    其中source_host填写的是你的主库的ip地址,source_user填写的是你刚才创建的从库用户的名称,source_password填写的是你刚才设置的从库用户登录密码,source_log_file填写的是使用show master status之后得到的File栏中的binlog文件名称,source_log_pos则填写Postion栏中的数据.这些数据是这样子获得的,如下图
    在这里插入图片描述
    那么你具体应该在控制台输入的信息应该是这样的

    在这里插入图片描述
    之后执行start replica操作将主从复制功能打开.

    start replica; 
    
    • 1

    之后在从库再次使用show replica status\G来显示主库的信息

    show replica status\G;
    
    • 1

    在这里插入图片描述
    如果这里出现的是两个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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在从库中展示数据发现数据已经同步,如果不那么自信,也可以对主库中的数据进行修改之后,再次查询从库中的数据是否也被修改了.
    在这里插入图片描述
    至此,主从复制完成,如有其他问题可以在评论区进行留言,看到了就会帮你解决…

  • 相关阅读:
    这个Python读取文件的方法,堪称天花板级别...
    操作符——C语言初阶
    mysql5.7从入门到精通笔记
    软件方法(下)第8章Part14:不要因为偷懒或炫耀而定义组合
    蓝桥等考Python组别十五级004
    (ICLR-2019)DARTS:可微分架构搜索
    我只用CV大法就实现了小程序的tabBar
    Lwip中实现DM9000/DM9003驱动之一
    信息安全管理体系认证对企业的好处
    数据中台稳定性的“四高” | StartDT Tech Lab 18
  • 原文地址:https://blog.csdn.net/Zhangsama1/article/details/126453018