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;
记录下其中的 File
和 Position
的值。
然后,我们需要登录到从服务器的容器中。使用以下命令:
docker exec -it <slave-container-id> mysql -uroot -p
在从服务器的命