后端 | 基于 Docker 部署 MySQL8 集群(一主二从)

本贴最后更新于 1204 天前,其中的信息可能已经水流花落

一.CentOS7.9 安装 Docker20

  1. 安装 yum-utils 工具
yum install -y yum-utils
  1. 设置 docker 的依赖源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

注释:CentOS 直接使用 yum 命令安装的 Docker 版本为 1.13.1 属于旧版 docker 的最后一个版本,所以需要配置一个 repo,才能安装新版的 Docker-CE(社区版)。Docker-EE(企业版)需收费读者自行了解即可,这里使用 CE 社区版

  1. 安装 docker
yum -y install docker-ce
  1. 查看安装的版本
docker -v
docker version

image.png
5. 查看配套设置的版本

yum list installed | grep docker

image.png

6.拉取 MySQL8 镜像

docker pull mysql:8

注解:mysql:5.7 代表 mysql 版本为 5.7

  1. 查看 docker 镜像
docker images

image.png

二.部署 MySQL 集群(一主二从)

1.创建主从 MySQL 的配置及数据文件的存储目录

# 创建主服务的配置目录和数据目录
mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data

# 创建1号从服务器的配置目录和数据目录
mkdir -p /usr/local/mysqlData/slave/cnf
mkdir -p /usr/local/mysqlData/slave/data

# 创建2号从服务器的配置目录和数据目录
mkdir -p /usr/local/mysqlData/slave2/cnf
mkdir -p /usr/local/mysqlData/slave2/data

创建两个从服务器的配置是因为 MySQL 配置的 server-id 不能重复

image.png

2.配置主服务器的配置文件

vim /usr/local/mysqlData/master/cnf/mysql.cnf

配置文件如下

[mysqld]
## 设置server_id,注意要唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
##设置字符编码为utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

3.配置从服务器的配置文件

# 1号从服务器
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
# 2号从服务器
vim /usr/local/mysqlData/slave2/cnf/mysql.cnf

配置文件如下(1 号的 server-id 设置为 2,2 号的 server-id 设置为 3,不重复即可)

[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 开启binlog
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog缓存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
##设置字符编码为utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
slave_skip_errors=1062
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4

4.创建主从 MySQL 镜像

# 主服务器实例化
docker run -itd -p 3307:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8 

# 1号从服务器实例化
docker run -itd -p 3308:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8 

# 2号从服务器实例化
docker run -itd -p 3309:3306 --name slaver2 -v /usr/local/mysqlData/slave2/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave2/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8

参数解释

-p 指定容器暴露的端口,宿主机(物理机)端口: docker 实例端口
-p 3307:3306 把物理机的 3307 端口给实例的端口 3306 端口进行映射

-v 给容器挂载存储卷,挂载到容器的某个目录
-v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d 把刚创建的配置文件夹映射成实例的/etc/mysql/conf.d
-v /usr/local/mysqlData/master/data:/var/lib/mysql 数据文件夹的映射

-e 指定环境变量,容器中可以使用该环境变量
-e MYSQL_ROOT_PASSWORD=123456 设置 MySQL 的 root 账号密码为 123456

  1. 查看已创建的实例
docker ps -a

image.png

  1. 创建 mysql 连接用户
# 创建用户 reader设置密码为reader
CREATE USER reader IDENTIFIED BY 'reader';
# 给予reader同步权限
GRANT REPLICATION SLAVE ON *.* to 'reader'@'%';
FLUSH PRIVILEGES;

注解:其余的用户,远程连接的自行设置

  1. 获取主服务器的连接信息
# MySQL的连接信息
SHOW MASTER STATUS;

#新开连接 获取master实例的在docker的地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master

image.png

  1. 从服务器连接主服务器(两台从服务器均是以下操作)
# 配置连接的参数
change master to master_host='172.17.0.2',master_user='reader',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=2259;
# 启动同步
start slave;
# 查看是否成功
show slave status\G

# 两项都为Yes时代表成功。
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

# 失败需要使用停止连接后检查其他账号密码,地址,pos等参数

# 停止连接,如果一次成功无需使用该命令
stop slave;

image.png

三.结果

主服务器执行命令

SHOW SLAVE HOSTS;

image.png

能从主服务器查询到两台从服务器的 ID 以及端口。完成 MySQL 部署。

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    490 引用 • 916 回帖 • 2 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    677 引用 • 535 回帖
1 操作
z875479694h 在 2021-07-19 17:43:28 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...