手把手保姆式演示 MySQL 主从的搭建

环境

我这里是在 Docker 上安装的 MySQL,方便对版本的控制,且下载安装方便。

这里安装了三个 MySQL,对应的是一个主从,两个从机

这里使用 MySQL 版本使用的是 5.7 的,如果你使用的是 MySQL8 的,这里也会有说明

  • 主机:33061
  • 从机1:33062
  • 从机2:33063

安装(前置准备)

在 Docker 上安装 MySQL 很简单,就一行代码的事情

docker run --name mysql01 -p 33061:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

运行之后,就像下面这样

在这里插入图片描述

  1. 安装好之后,就可以通过 Navcat、SQLyog 这类的数据库可视化工具来连接。这个很简单,直接新建连接就可以了,这里就不做演示了。

  2. 还有一种就是在 docker 容器里面来运行安装好的 MySQL,像下面这样:
    在这里插入图片描述

主机配置

A. 授权给从机服务

  1. 首先在主机,也就是 33061 中运行以下 SQL 语句:

    # 配置主机权限
    GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.31.129' identified by '123';
    # 刷新权限
    FLUSH PRIVILEGES;
    

    (1) 这里表示配置从机登录用户名为 rep,密码为 123,且必须要从 192.168.31.129 这个地址登录。登录成功后可以操作任意库中的表。

    (2) 如果说,你不需要限制从机登录的地址,你也可以设置 IP 地址更换为一个 % ,表示所有。

    (3) 运行之后,点击 用户 你会发现多了一个 rep1 用户
    在这里插入图片描述

  2. 如果你是 MySQL8 的话呢,用户创建和授权则需要分开了,不能像 MySQL5 这样一步到位

    # 创建用户
    CREATE USER 'rep1'@'192.168.31.129' IDENTIFIED WITH caching_sha2_password BY '123';
    # 配置权限
    GRANT Replication Slave ON *.* TO 'rep1'@'192.168.31.129';
    

    这个其实就是分开了,意思与前面解释大同小异的。当然,这里运行之后也是需要执行上面的语句刷新权限的,这里为了不混淆视听就不加上了,即 FLUSH PRIVILEGES

B. 修改主库配置文件

  1. 主库即主机,在 33061 这个数据库中找到配置文件,开启 binlog,并设置 server-id 。注意:每一次修改配置文件之后都要重启 MySQL 服务,不然配置将不生效

  2. 因为 MySQL 都是在 Docker 容器上安装的,所以需要进入到 Docker 容器中去修改 MySQL 的配置。后面就不作解释了,注意别搞混淆了。

  3. 下面开始配置:

    (1) 先进入到 mysql01 中: docker exec -it mysql01 /bin/bash

    (2) 进来之后,到 /etc/mysql/ 这个目录下,查看一下 my.cnf 里面是怎么说的,有些版本是可以直接在 my.cnf 里面进行配置的,观察一下有没有 **[mysqld] ** 这样一个标记。
    在这里插入图片描述

    (3) 执行这条代码 cat my.cnf 查看该文件,在最后那里你会发现,好像也没有 [mysqld] ,只有两条引用:
    在这里插入图片描述

    (4) 其实我们需要修改的配置文件就在 mysql.conf.d 那里,我们可以进去该目录 cat 看一下,在该目录下有一个叫 mysqld.cnf 的配置文件
    在这里插入图片描述

    (5) 此时随之而来又有新的一个问题,那就是在 Docker 容器中是没有 vi 编辑器的,所以修改起来会非常麻烦。当然你也可以在 Docker 容器中下载一个,但是没有必要,因为我们本身就不希望 Docker 里面过于复杂。

    (6) 所以在这里我的做法是:把 cat 查看的内容全部 copy,注意别给复杂漏了,然后在容器外面创建一个同样是叫 mysqld.cnf 的文件,把 copy 到的内容复制过去。修改完成后,复制到 Docker 容器里面替换掉原来的 mysqld.cnf 文件

    (7) exit 退出 Docker 容器后, vi mysqld.cnf 创建一个配置文件,把复制的内容粘贴过来,然后再最下面加上你的配置:

    server-id=33061
    binlog-do-db=db01
    log-bin=/var/lib/mysql/binlog
    

    在这里插入图片描述

    • server-id :MySQL 在主从环境下的唯一标识符,给个任意数字即可,注意不能和从机重复(我这里是直接使用主机的端口号了,当然这个都无所谓了)
    • binlog-do-db :表示要同步的数据库名,当从机连接上主机之后,只有这里配置了的数据库才会被同步到从机里面去,其他的不会被同步
    • log-bin :同步的日志路径以及文件名,一定要注意的是,这个目录中一定是 MySQL 有写权限的目录

    (8) 保存退出后,把该文件复制到 Docker 容器里面替换掉原来的 mysqld.cnf 文件

    # 把该文件复制到 Docker 容器里面替换掉原来的 mysqld.cnf 文件
    docker cp mysqld.cnf mysql01:/etc/mysql/mysql.conf.d/
    # 重启 mysql01
    docker restart mysql01
    

    在这里插入图片描述

C. 查看主机的二进制日志名和偏移量

此时,对于主机的配置就基本上已经完成了,最后一下 SQL 命令,再查看一下状态以及偏移量等信息

SHOW MASTER STATUS

在这里插入图片描述

大概解释一下这几个的意思:

  • File:其实就是 biglog 文件,也就是二进制日志,这个文件会随着数据的改变越来越大,所以当到达一个上限后会自动创建一个 biglog 文件,也就是说还会有:binlog.000002、binlog.000003…当然 biglog 的改变还有好几种原因,像如果重启了 MySQL 也会重新开启一个 biglog
  • Position:这个是我们关注的重点,偏移量。即一个状态值,这个后面结合从机再解释吧。
  • Binlog_Do_DB:这个就是与从机关联上的那个数据库了,是我们自己在配置文件上进行配置的

从机配置

A. 修改从库配置文件

这个与上面主机的配置是类似的,只是需要的配置内容有一点区别而已,这里就长话短说了

  1. 在从机的配置中,只需要添加一个 server-id 就可以了
    在这里插入图片描述

  2. 然后还是一样的配方,直接 cp 到从机的配置目录中替换掉原来的文件

    docker cp mysqld.cnf mysql02:/etc/mysql/mysql.conf.d/
    

    注意,这里是我从机的数据库了 mysql02 ,不要看走眼了

  3. 第二个从机也是一样的,配置文件中 server-id 换成 33063,然后 cp 的时候换成 mysql03 就好了。操作与上面一样,这里就不演示了

  4. 当然,都弄好之后,不要忘了 docker restart mysql02 重启一下数据库,mysql03 这个数据库也是一样的

B. 绑定主机

  1. 在从机中输入下面的 SQL 语句,与主机进行绑定。这里用 mysql02(33062)来进行演示,第二个从机 mysql03(33063)是一样的操作,这样就不演示了。

    # 绑定主机
    change master to master_host='192.168.31.129',master_port=33061,master_user='rep1',master_password='123',master_log_file='binlog.000001',master_log_pos=154;
    

    一步一步的来解释一下上面的意思

    • master_host :主机的 IP 地址
    • master_port :主机的端口号
    • master_user :主机创建的名字
    • master_password :主机的密码
    • master_log_file :指定需要同步的二进制文件,在这个文件中有着对主机数据操作的记录
    • master_log_pos :注意,这个就是在上面 show master status 中需要关注的 重点了。这个的意思,就是记录主机某一时刻的状态,即你想要重主机哪一个时间节点中去同步数据。初始值就是 154,如果你有进行一些别的操作,比如添加一个表呀,增加一条记录呀等等,这个数值都会变化。而此时你在这里需要制定的值就是指明在哪一个时间节点去同步数据。如果 154 即完全同步了
  2. 如果你使用的是 MySQL8 的版本,由于 MySQL8 密码插件的问题,这个问题同样会给主从配置带来一些不一样的区别,所以在 MySQL8 中还需要添加 get_master_public_key=1

    change master to master_host='192.168.248.128',master_port=3306,master_user='rep1',master_passwor d='123',master_log_file='binlog.000001',master_log_pos=120,get_master_public_key =1;
    

    与上面的就差别就是多了:get_master_public_key=1

C. 启动从机

# 启动从机
start slave

启动之后,再输入以下 SQL 查看从机的状态:

# 查看从机的状态
SHOW SLAVE STATUS

如果在返回的状态信息中,能够看到下面这两个 Yes 即表示已经搭建成功了

在这里插入图片描述

好了,到这里中从配置已经搭建好了,此时在主机中创建数据库(db01),在里面进行操作,从机就会自动同步

验证

注意:还有一点,主机中只有 db01 这个数据库中的数据是可以自动同步到从机中的。因为前面在配置主机的时候只配置了 db01,如果你有需求,也可以多添加几个数据库

  1. 简单的创建一个测试表
    在这里插入图片描述

  2. 给主机的表中添加一些数据
    在这里插入图片描述

  3. 然后,来到从机中刷新,此时你会发现,在主机中进行的操作,在从机里面全部都同步了。
    在这里插入图片描述

这就是 MySQL 中主从的搭建

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天怎么不会塌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值