Docker搭建MySQL8.0.30主从同步

概述

MySQL是一款非常流行的关系型数据库管理系统,而Docker是一种容器化技术,可以轻松地部署和管理应用程序。本文将介绍如何使用Docker搭建MySQL8.0.30主从同步。

准备工作

在开始之前,确保已经安装了Docker和Docker Compose,可以通过以下命令检查版本:

docker --version
docker-compose --version

如果没有安装,请根据操作系统的不同,参考Docker的官方文档进行安装。

创建Docker容器

首先,我们需要创建两个MySQL容器,一个作为主服务器,另一个作为从服务器。

创建主服务器容器

在创建主服务器容器之前,我们需要在本地创建一个目录用于存储MySQL数据。在命令行中执行以下命令:

mkdir /path/to/mysql/data

然后,我们可以使用Docker Compose来创建主服务器容器。创建一个名为docker-compose.yml的文件,并添加以下内容:

version: '3'
services:
  master:
    image: mysql:8.0.30
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    volumes:
      - /path/to/mysql/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword

上述配置文件中,我们使用了MySQL8.0.30的官方Docker镜像,并映射了主服务器容器的3306端口到主机的3306端口。另外,通过volumes选项将我们创建的本地目录与容器中的/var/lib/mysql目录进行映射。最后,我们设置了MySQL的root密码、数据库名称、用户名和密码。

保存文件后,在命令行中执行以下命令以创建主服务器容器:

docker-compose up -d

等待一段时间,主服务器容器就会创建成功。可以通过以下命令检查容器是否正在运行:

docker-compose ps

创建从服务器容器

创建从服务器容器的步骤与创建主服务器容器相似。首先,在本地创建一个目录用于存储从服务器的MySQL数据。在命令行中执行以下命令:

mkdir /path/to/mysql/data_slave

然后,修改docker-compose.yml文件,添加从服务器容器的配置:

version: '3'
services:
  ...
  slave:
    image: mysql:8.0.30
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3307:3306
    volumes:
      - /path/to/mysql/data_slave:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root_password
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword

上述配置文件中,我们将从服务器容器的端口映射到主机的3307端口,并将从服务器的MySQL数据目录映射到本地目录。

保存文件后,在命令行中执行以下命令以创建从服务器容器:

docker-compose up -d

同样地,等待一段时间,从服务器容器就会创建成功。可以通过以下命令检查容器是否正在运行:

docker-compose ps

配置主从同步

现在,我们已经成功创建了主服务器和从服务器容器。接下来,我们需要配置主从同步。

配置主服务器

首先,我们需要登录到主服务器容器中。在命令行中执行以下命令:

docker-compose exec master bash

然后,使用以下命令登录到MySQL:

mysql -uroot -proot_password

登录成功后,执行以下命令创建一个用于主从同步的用户:

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

接下来,执行以下命令查看主服务器的binlog文件和位置:

SHOW MASTER STATUS;

记录下返回结果中的File和Position,