0
点赞
收藏
分享

微信扫一扫

docker mysql 8.0 主从

Docker MySQL 8.0 主从复制

简介

Docker 是一种利用容器化技术进行应用程序的封装和部署的工具,而MySQL是一个流行的关系型数据库管理系统。本文将介绍如何使用Docker和MySQL 8.0建立主从复制的环境。

主从复制是指将一个MySQL数据库服务器作为主服务器,其他服务器作为从服务器。主服务器负责处理写操作,从服务器复制主服务器的数据并负责读操作。这种架构可以提高数据库的可用性和性能。

步骤

步骤1 - 创建Docker镜像

首先,我们需要创建一个Docker镜像,该镜像将作为MySQL服务器的基础。我们可以使用官方的MySQL 8.0镜像,并在此基础上进行扩展。下面是一个简单的Dockerfile示例:

FROM mysql:8.0

# 复制配置文件到容器中
COPY ./my.cnf /etc/mysql/my.cnf

这个Dockerfile使用了官方的MySQL 8.0镜像作为基础,并将自定义的 my.cnf 配置文件复制到容器中。我们可以根据需要进行个性化的配置,比如设置字符集、调整缓存大小等。

步骤2 - 创建主服务器容器

接下来,我们需要创建主服务器容器。我们可以使用上一步创建的Docker镜像,并通过设置一些环境变量来进行配置。这里我们使用 docker-compose 来管理容器,创建一个 docker-compose.yml 文件:

```yaml
version: '3'

services:
  master:
    image: mysql:8.0
    volumes:
      - ./data/master:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=mydb

这个配置文件定义了一个服务 master,使用了MySQL 8.0镜像,并且将数据目录和配置文件目录挂载到宿主机上。我们还设置了MySQL的root密码和数据库名称。

使用以下命令启动容器:

docker-compose up -d

步骤3 - 创建从服务器容器

现在,我们可以创建从服务器容器。同样,我们使用Docker镜像,并通过设置环境变量进行配置。这里的配置与主服务器类似,只需要修改一些参数。我们可以在同一个 docker-compose.yml 文件中添加一个服务 slave

```yaml
services:
  slave:
    image: mysql:8.0
    volumes:
      - ./data/slave:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=mydb
      - MYSQL_MASTER_HOST=master
      - MYSQL_MASTER_PORT=3306
      - MYSQL_MASTER_USER=root
      - MYSQL_MASTER_PASSWORD=password

这里我们增加了一些环境变量,用于指定主服务器的连接信息。

同样使用以下命令启动容器:

docker-compose up -d

步骤4 - 设置主从复制

现在,我们需要在主服务器和从服务器上设置主从复制。我们可以使用MySQL的命令行客户端 mysql 来完成这个任务。

首先,我们需要登录到主服务器的容器中。使用以下命令:

docker exec -it <master-container-id> mysql -uroot -p

然后,我们需要创建一个用于从服务器复制的用户,并授予相应的权限。在MySQL的命令行中执行以下命令:

CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
FLUSH PRIVILEGES;

接下来,我们需要查看主服务器的状态,并记录下一些信息。在MySQL的命令行中执行以下命令:

SHOW MASTER STATUS;

记录下其中的 FilePosition 的值。

然后,我们需要登录到从服务器的容器中。使用以下命令:

docker exec -it <slave-container-id> mysql -uroot -p

在从服务器的命

举报

相关推荐

0 条评论