- 安装Docker并创建网络
首先需要在本机安装Docker,安装完成之后,创建一个网络,用于在不同容器之间通信。
- 创建网络的命令如下所示:
docker network create mysql_cluster
- 创建MySQL8容器
为了实现一主二从的集群部署,我们需要创建主节点和从节点的容器。在这里使用官方提供的MySQL 8镜像。
- 创建主节点容器:
docker run --name=mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d --net=mysql_cluster mysql/mysql-server:8.0 --server-id=1 --log-bin --gtid-mode=ON --enforce-gtid-consistency
此命令中,--name
指定容器名称为mysql_master;-p 3306:3306
为映射本地端口号和容器端口号的关系;-e MYSQL_ROOT_PASSWORD=password
为设置密码;-d
为后台运行;--net=mysql_cluster
为指定网络;--server-id=1 --log-bin --gtid-mode=ON --enforce-gtid-consistency
为配置MySQL主节点的参数。
- 创建两个从节点容器:
docker run --name=mysql_slave1 -d --net=mysql_cluster mysql/mysql-server:8.0 --server-id=2 --log-bin --gtid-mode=ON --enforce-gtid-consistency
docker run --name=mysql_slave2 -d --net=mysql_cluster mysql/mysql-server:8.0 --server-id=3 --log-bin --gtid-mode=ON --enforce-gtid-consistency
在创建两个从节点容器时,不需要设置端口号,除此之外,其他的参数设置与创建主节点容器时相同。
- 配置主从复制
在配置主从复制时需要完成以下步骤:
- 登录并进入主容器
docker exec -it mysql_master mysql -uroot -p
在输入密码之后进入MySQL控制台。
- 创建用于主从复制的用户并完成授权
CREATE USER 'replication'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
- 查询主节点状态
SHOW MASTER STATUS;
在查询出来的结果中,记录下File和Position列的值,这些值后面会在配置从节点时使用到。
- 配置从节点信息
CHANGE MASTER TO master_host='mysql_master', master_port=3306, master_user='replication', master_password='password', master_auto_position=1;
在以上命令中,master_host
配置主节点的地址;master_port
为主节点的端口;master_user
为用于主从复制的用户;master_password
为用于主从复制的用户的密码;master_auto_position
为选择自动位点模式。
- 启动从节点的复制
START SLAVE;
- 查询从节点状态
SHOW SLAVE STATUS\G
在查询出来的结果中,查看Slave_IO_Running
和Slave_SQL_Running
是否为Yes
,如果都为Yes
则表示主从复制配置成功。
- 示例
以下是两个示例,分别展示了创建一个MySQL主从集群应用的两种方式:
- 通过Docker Compose创建MySQL主从集群应用:
version: "3"
services:
master:
image: mysql/mysql-server:8.0
container_name: mysql_master
volumes:
- master-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
command: [
"--server-id=1",
"--log-bin",
"--gtid-mode=ON",
"--enforce-gtid-consistency"
]
ports:
- "3306:3306"
networks:
- mysql_cluster
slave1:
image: mysql/mysql-server:8.0
container_name: mysql_slave1
volumes:
- slave1-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
command: [
"--server-id=2",
"--log-bin",
"--gtid-mode=ON",
"--enforce-gtid-consistency"
]
networks:
- mysql_cluster
slave2:
image: mysql/mysql-server:8.0
container_name: mysql_slave2
volumes:
- slave2-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "password"
command: [
"--server-id=3",
"--log-bin",
"--gtid-mode=ON",
"--enforce-gtid-consistency"
]
networks:
- mysql_cluster
volumes:
master-data:
slave1-data:
slave2-data:
networks:
mysql_cluster:
在以上配置中,我们可以看到使用Docker Compose来创建MySQL主从集群应用的步骤主要包括设置镜像名称、容器名称、数据路径、环境变量、网络等内容。这种方式可以一步完成MySQL主从集群的构建。
- 通过Dockerfile创建MySQL主从集群应用
FROM mysql/mysql-server:8.0
RUN echo "max_allowed_packet=16777216" >> /etc/my.cnf
COPY my.cnf /etc/mysql/conf.d/my.cnf
EXPOSE 3306
在这种方式下,我们使用了Dockerfile,这个文件的内容包括了FROM、RUN、COPY、EXPOSE等指令,这些指令用于构建MySQL主从集群应用所需要的环境。这种方式需要手动依次创建MySQL主节点、两个从节点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker部署MySQL8集群(一主二从)的实现步骤 - Python技术站