返回

Docker-Compose构建Mysql集群:一主一从,轻松搞定

后端

使用 Docker-Compose 搭建 MySQL 主从复制集群:详细指南

准备工作

为了在 Docker 环境中建立 MySQL 主从复制集群,我们需要完成以下准备工作:

  1. 安装 Docker 和 Docker-Compose: 确保你的系统中已经安装了 Docker 和 Docker-Compose,可以通过官方网站获取安装指南。
  2. 准备 MySQL 镜像: 使用官方提供的 MySQL 镜像或选择你需要的特定版本。

创建 Docker-Compose 文件

Docker-Compose 文件定义了集群的配置,用于启动和管理容器。创建一个名为 docker-compose.yml 的文件,并添加以下内容:

version: '3.7'

services:
  master:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: db
    volumes:
      - mysql-data:/var/lib/mysql
  slave:
    image: mysql:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: db
    volumes:
      - mysql-data:/var/lib/mysql
    depends_on:
      - master

volumes:
  mysql-data:
  • master: 主库容器的配置。
  • slave: 从库容器的配置。
  • MYSQL_ROOT_PASSWORD: 数据库 root 用户的密码。
  • MYSQL_DATABASE: 要创建的数据库名称。
  • volumes: 挂载容器中的数据目录到宿主机的 mysql-data 目录,确保数据的持久性。

配置 MySQL

为了配置 MySQL,我们需要执行以下步骤:

  1. 创建 conf 文件夹: 创建一个名为 conf 的文件夹,并将 my.cnf 文件复制到其中。
  2. 配置 my.cnf 文件:my.cnf 文件中添加以下内容:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=db
  • server-id: 数据库的唯一标识符。
  • log-bin: 开启二进制日志。
  • binlog-do-db: 指定要复制的数据库。
  1. 复制 init.sql 文件:init 文件夹中的 init.sql 文件复制到容器中。

启动集群

运行 docker-compose up -d 命令启动集群。使用 docker ps 命令检查容器是否正在运行。

测试集群

  1. 连接到主库并创建表:
CREATE TABLE table1 (id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255), PRIMARY KEY (id));
  1. 连接到从库并查看表:
SHOW TABLES;

如果从库中可以看到 table1 表,则表示集群配置成功。

常见问题

1. 从库无法连接到主库: 检查主库的 IP 地址是否正确,并且主库已开启二进制日志。

2. 从库无法复制数据: 检查从库的配置文件是否正确,并且从库已启动复制线程。

3. 如何修改 root 密码: 停止集群,编辑 docker-compose.yml 文件,修改 MYSQL_ROOT_PASSWORD 环境变量,然后重新启动集群。

4. 如何添加更多从库: 编辑 docker-compose.yml 文件,添加更多 slave 服务,并将其 depends_on 设置为 master

5. 如何备份数据: 使用 docker exec 命令将数据导出到文件或使用 MySQL 备份工具。

总结

使用 Docker-Compose 在 Docker 环境中部署 MySQL 主从复制集群是一种简单有效的方法。这种方法对于高可用性架构和分布式应用程序场景非常有用。通过遵循本指南,你可以轻松地建立一个健壮且可靠的 MySQL 集群。