【MySQL】主从复制搭建的记录

步骤

MySQL主从复制的基本步骤为:

  1. 配置 server-id
  2. 开启 bin-log
  3. 开始复制

这里以 docker 容器为例。

1、配置文件

可以先把配置文件放好,容器启动时直接挂载配置文件到容器中。

主节点配置文件 my.cnf:

[mysqld]
log-bin=mysql-bin
server-id=1

从节点配置文件 my.cnf:

[mysqld]
server-id=2

在这里插入图片描述

2、创建网络

能够主从复制的前提是两台主机能够相互 ping 通。

docker network create --subnet=192.192.192.0/24 mysql_cluster_net

docker 的三种网络概述:

  1. bridge 模式:以虚拟网桥的形式连接容器和宿主机。是默认的网络模式。
  2. host 模式:使用宿主机的网络和端口。
  3. none 模式:容器不能进行网络通信。
  4. 自定义模式:
    1. bridge
    2. overlay:当有多个主机时,跨主机的容器通信。
    3. macvlan:每个容器都有一个虚拟的 MAC 地址。

在这里插入图片描述

3、创建容器并加入网络

创建主节点 mysql_master:

docker run -d \
           -p 3306:3306 \
           -v /f/mysql/mysql80/3306/conf.d/:/etc/mysql/conf.d/ \
           -v /f/mysql/mysql80/3306/data/:/var/lib/mysql/ \
           -v /f/mysql/mysql80/3306/mysql-files/:/var/lib/mysql-files/ \
           -e MYSQL_ROOT_PASSWORD=1234 \
           --network=mysql_cluster_net \
           --ip=192.192.192.2 \
           --privileged=true \
           --name=mysql_master \
           mysql

创建从节点 mysql_slaver:

docker run -d \
           -p 3307:3306 \
           -v /f/mysql/mysql80/3307/conf.d/:/etc/mysql/conf.d/ \
           -v /f/mysql/mysql80/3307/data/:/var/lib/mysql/ \
           -v /f/mysql/mysql80/3307/mysql-files/:/var/lib/mysql-files/ \
           -e MYSQL_ROOT_PASSWORD=1234 \
           --network=mysql_cluster_net \
           --ip=192.192.192.3 \
           --privileged=true \
           --name=mysql_slaver \
           mysql

在这里插入图片描述

4、在主节点创建用于复制的用户

以Cygwin为模拟 unix 环境的本地终端在进入容器时需要配置,因此采用了 powershell,powershell是配置好的。

创建的用于复制的用户时必须使用 mysql_native_password 密码规则插件:

CREATE USER 'slaver'@'192.192.192.3' IDENTIFIED WITH mysql_native_password BY '1234';

对 用户授权:

GRANT REPLICATION SLAVE ON *.* TO 'slaver'@'192.192.192.3';

刷新权限:

FLUSH PRIVILEGES;

在这里插入图片描述

5、获取主节点当前的 binary log 文件名和位置

SHOW MASTER STATUS;

在这里插入图片描述

6、从节点设置主节点参数

如果失败了还需要重新获取主节点参数并重新设置,即执行上一个步骤和此步骤。

CHANGE MASTER TO MASTER_HOST='192.192.192.2',\
                 MASTER_USER='slaver',\
                 MASTER_PASSWORD='1234',\
                 MASTER_LOG_FILE='mysql-bin.000005',\
                 MASTER_LOG_POS=1678;

在这里插入图片描述

7、从节点开始同步

开始同步:

START SLAVE;

查看从节点状态:

SHOW SLAVE STATUS\G;

在这里插入图片描述

如果失败也可以在这些信息中找到错误的原因,可以使用如下命令停止复制:

STOP SLAVE;

8、测试

在这里插入图片描述

注意事项

密码认证插件

通常情况下为了将navicat等客户端工具连接上MySQL,都会强调将密码认证插件由 caching_sha2_password 改成 mysql_native_passord,如:

在这里插入图片描述
百度到的结果基本也都解释为,客户端工具的MySQL驱动版本太低,要么升级客户端工具的MySQL驱动,要么使用命令行,要么更改密码认证插件。

但是换言之,MySQL8版本已经出来这么久,8.0版本和5.7版本就好比JDK的8版本和11版本,都是重大的更新,而如果客户端工具依旧既没有使用8版本的驱动,还不为用户提供可配置可插拔的驱动设置,那么是不是这款客户端工具有点那个啥了。

但是通过查看安装目录和测试,至少navicat客户端已经支持8版本的密码认证规则了。

在这里插入图片描述

在这里插入图片描述

docker for windows的数据卷容器

在windows上的docker实际上运行了一层虚拟机,所以挂载时只能挂载与虚拟机共享的磁盘。然而,虽然mac系统由unix衍生,但是mac系统也是和windows一样的。所以,人生苦短我用Manjaro······

本教主将F盘作为共享磁盘,可以通过类似如下的方式访问:

ls -l /f/mysql/mysql80/3306/conf.d/

在这里插入图片描述

挂载

在百度上可以看到很多教程可以只挂载文件,和挂载目录的方式是相同的,例如:

-v /f/mysql/mysql80/3306/my.cnf:/etc/mysql/my.cnf

但是在尝试时确始终提示文件和目录不对应,而在DockerHub上的mysql说明也是映射 conf.d 目录,浏览 /etc/mysql/my.cnf 文件时发现也提到了 custom 配置应包含在conf.d目录中,所以挂载 conf.d 目录也挺好的。又或者,这些操作也仅仅局限于自己玩一玩罢了,也并不满足高可用的集群方案。

原创文章 41 获赞 34 访问量 3万+

猜你喜欢

转载自blog.csdn.net/XY1790026787/article/details/104401734