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,