使用Docker部署MySQL主从复制:详细步骤与实践
MySQL主从复制是一种常见的数据库扩展方案,可以提高数据库的读取性能和容灾能力。通过Docker来部署MySQL主从复制,不仅简化了环境的搭建,还能够轻松实现容器化管理。本文将详细介绍如何通过Docker搭建一个简单的MySQL主从复制环境。
一、什么是MySQL主从复制?
MySQL主从复制是一种主数据库与从数据库之间数据同步的机制。主数据库负责处理写操作,而从数据库负责处理读操作。数据会从主库传递到从库,实现数据的一致性。主从复制主要有以下几个应用场景:
- 读写分离:提高数据库的并发处理能力。
- 容灾备份:保障数据的安全性。
- 数据分布:便于地理分布式数据库的部署。
二、环境准备
为了完成本次实验,你需要:
- Docker(确保已经安装并启动)
- Docker Compose(用于管理多个容器)
- 两个MySQL容器:一个作为主库,一个作为从库
1. 准备Docker镜像
首先,确保你已经安装了MySQL的Docker镜像,可以通过以下命令拉取官方的MySQL镜像:
docker pull mysql:latest
2. 创建Docker网络
为了让主从数据库容器能够相互通信,我们需要创建一个自定义的Docker网络:
docker network create mysql-replication
三、编写Docker Compose文件
在本次部署中,我们将使用docker-compose.yml文件来管理MySQL主从容器的配置。创建docker-compose.yml文件,并添加以下内容:
version: '3'
services:
mysql-master:
image: mysql:latest
container_name: mysql-master
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
volumes:
- ./master_data:/var/lib/mysql
ports:
- "3306:3306"
networks:
- mysql-replication
command: --default-authentication-plugin=mysql_native_password --server-id=1 --log-bin=mysql-bin
mysql-slave:
image: mysql:latest
container_name: mysql-slave
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
volumes:
- ./slave_data:/var/lib/mysql
ports:
- "3307:3306"
networks:
- mysql-replication
depends_on:
- mysql-master
command: --default-authentication-plugin=mysql_native_password --server-id=2 --relay-log=mysql-relay-bin
networks:
mysql-replication:
driver: bridge
四、配置主库与从库
1. 启动容器
通过docker-compose up -d命令启动主库和从库容器。
docker-compose up -d
2. 进入主库配置
进入主库容器,并设置主从复制的用户和权限。
docker exec -it mysql-master bash
登录MySQL:
mysql -u root -p
在MySQL中执行以下SQL命令,创建一个用于复制的用户,并赋予权限:
CREATE USER 'replica'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
接下来,通过以下命令查看主库的状态,记录下File和Position信息,这将用于配置从库。
SHOW MASTER STATUS;
3. 配置从库
进入从库容器并配置从库:
docker exec -it mysql-slave bash
mysql -u root -p
在MySQL中执行以下命令,将从库连接到主库,并使用之前在主库中记录的File和Position信息:
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1234;
启动从库复制进程:
START SLAVE;
4. 验证主从复制
在从库中执行以下命令,查看从库的状态:
SHOW SLAVE STATUS\G;
确保Slave_IO_Running和Slave_SQL_Running均显示为Yes,表示主从复制正常运行。
五、测试主从复制
在主库中插入一些数据,验证这些数据是否被正确复制到从库中。
-- 在主库中插入数据
USE testdb;
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob');
-- 在从库中查看数据
SELECT * FROM users;
如果从库中也能够看到相同的数据,则说明主从复制配置成功。

浙公网安备 33010602011771号