在 CentOS 上使用 Docker 搭建 MySQL 5.7 集群是一个复杂但很有用的过程。MySQL 5.7 集群通常指的是基于 MySQL 的高可用性配置,如 MySQL Group Replication 或 MySQL InnoDB Cluster。以下将详细介绍如何在 CentOS 上使用 Docker 搭建一个基本的 MySQL 5.7 集群,包括必要的步骤和配置。
一、环境准备
-
确保 Docker 和 Docker Compose 已安装
在 CentOS 上安装 Docker 和 Docker Compose。如果尚未安装,请使用以下命令:
sudo yum update -y sudo yum install -y docker sudo systemctl start docker sudo systemctl enable docker # 安装 Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose -
拉取 MySQL 5.7 镜像
使用 Docker Hub 提供的官方 MySQL 镜像:
docker pull mysql:5.7
二、配置 MySQL 集群
-
创建 Docker 网络
为 MySQL 实例创建一个专用的 Docker 网络:
docker network create mysql-cluster -
创建 Docker Compose 配置文件
创建一个
docker-compose.yml文件,定义 MySQL 5.7 集群的服务配置。以下是一个包含三个 MySQL 实例的简单示例:version: '3.7' services: mysql1: image: mysql:5.7 container_name: mysql1 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword networks: - mysql-cluster volumes: - mysql1-data:/var/lib/mysql ports: - "3306:3306" mysql2: image: mysql:5.7 container_name: mysql2 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword networks: - mysql-cluster volumes: - mysql2-data:/var/lib/mysql mysql3: image: mysql:5.7 container_name: mysql3 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: mydatabase MYSQL_USER: myuser MYSQL_PASSWORD: mypassword networks: - mysql-cluster volumes: - mysql3-data:/var/lib/mysql networks: mysql-cluster: driver: bridge volumes: mysql1-data: mysql2-data: mysql3-data:这个配置文件定义了三个 MySQL 实例,每个实例都连接到
mysql-cluster网络,并且使用持久化数据卷保存数据。
三、启动集群
-
启动 MySQL 集群
使用 Docker Compose 启动 MySQL 集群:
docker-compose up -d这将启动三个 MySQL 实例,并将它们连接到指定的网络。
-
初始化集群
登录到任意一个 MySQL 实例,初始化 Group Replication 以形成集群:
docker exec -it mysql1 mysql -u root -p在 MySQL 客户端中执行以下 SQL 命令:
SET SQL_LOG_BIN=0; CREATE USER 'repl'@'%' IDENTIFIED BY 'replpassword'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='replpassword' FOR CHANNEL 'group_replication_recovery'; SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;注意: 以上 SQL 命令是为了在一个 MySQL 实例上初始化集群。如果在其他 MySQL 实例上执行,需要做适当调整。
-
验证集群状态
验证 MySQL 集群状态,以确保所有实例都正常运行并连接到集群中:
SHOW STATUS LIKE 'group_replication%';你应该能看到
group_replication_primary_member和其他相关状态。
四、配置客户端访问
-
配置客户端连接
你可以通过 Docker Compose 配置文件中定义的端口(如
3306)来连接到 MySQL 集群。使用以下命令从本地机器连接到 MySQL 实例:mysql -h 127.0.0.1 -P 3306 -u myuser -p -
配置负载均衡
如果需要对 MySQL 集群进行负载均衡,可以使用 MySQL Proxy 或其他负载均衡工具。
五、监控和维护
-
监控 MySQL 集群
使用 MySQL 自带的监控工具和第三方监控工具(如 Prometheus + Grafana)来监控集群的健康状态和性能指标。
-
定期备份
定期备份 MySQL 数据,确保在发生故障时可以恢复。
六、总结
通过 Docker 和 Docker Compose 可以方便地在 CentOS 上搭建 MySQL 5.7 集群。以下是关键步骤的汇总:
| 步骤 | 说明 |
|---|---|
| 环境准备 | 确保安装了 Docker 和 Docker Compose,并拉取 MySQL 5.7 镜像。 |
| 配置 MySQL 集群 | 创建 Docker 网络和 Docker Compose 配置文件,定义 MySQL 实例。 |
| 启动集群 | 使用 Docker Compose 启动 MySQL 实例,并初始化集群。 |
| 配置客户端访问 | 配置 MySQL 客户端连接,并设置负载均衡。 |
| 监控和维护 | 使用监控工具监控集群状态,并定期备份数据。 |
以上是使用 Docker 在 CentOS 上搭建 MySQL 5.7 集群的完整步骤。通过这些步骤,可以创建一个高可用性的 MySQL 集群,满足生产环境的需求。


