ITPub博客

首页 > 数据库 > MySQL > 基于Docker的MySQL主从复制环境搭建指南

基于Docker的MySQL主从复制环境搭建指南

原创 MySQL 作者:梦夕林1992 时间:2026-05-06 18:35:56 0 删除 编辑

在现代数据库架构中,主从复制是保证数据高可用和负载均衡的常用方案。而借助Docker,我们可以快速、隔离地部署MySQL主从环境。本文将以CentOS 7.4系统为例,手把手带你完成基于Docker的MySQL主从复制环境搭建。

📦 环境准备

在开始之前,请确保:

1.操作系统为 CentOS 7.4

2.网络连接正常

3.具备 root 权限或 sudo 权限

🐳 第一步:安装Docker

1. 更新系统并卸载旧版本Docker(如有)

sudo yum update -y
sudo yum remove docker docker-common docker-selinux docker-engine

2. 安装依赖工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm23. 设置阿里云Docker镜像源(加速下载)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4. 安装Docker

可以查看所有仓库中所有 docker 版本,并选择特定版本安装 。

 yum list docker-ce --showduplicates | sort -r

      docker 安装所需依赖包,配置 CentOS 源 EPE

 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 yum install epel-release -y

安装最新版本的 docker

sudo yum install -y docker-ce

5. 启动并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

6. 验证安装

docker version

如果看到 Client 和 Server 信息,说明安装成功!


🗄️ 第二步:部署MySQL容器

1. 拉取MySQL 8.0镜像

严格来说,无需在单独的步骤中下载服务器映像。但是,在创建Docker 容器之前执行此步骤可确保本地映像是最新的。要下载 MySQL Community Edition 映像,请运行以下命令

shell> docker pull mysql/mysql-server:tag
8.0: Pulling from mysql/mysql-server
03e20c09154c: Pull complete
be7ba00cd800: Pull complete
218845b603a2: Pull complete
0807146aa37b: Pull complete
Digest: sha256:5dfceab2e53e7dac983168c5f5d611d9d8e85c3bee7297c24c931d77fbeeaac3
Status: Downloaded newer image for mysql/mysql-server:8.0
docker.io/mysql/mysql-server:8.0

2. 启动主库(Master)

创建配置文件和数据目录:

mkdir -p /docker/master/date
vi /docker/master/my.cnf

配置内容:

[mysqld]
user=mysql
port=3308
datadir=/var/lib/mysql
log_error=myerror.log
server_id=1
log-bin=mysql-bin
binlog_format=ROW

启动容器:

docker run --name master \
  -p 3308:3308 \
  -v /docker/master/date:/var/lib/mysql \
  -v /docker/master/my.cnf:/etc/my.cnf \
  -e MYSQL_ROOT_PASSWORD=mysql \
  -d mysql/mysql-server:8.0

3. 启动从库(Slave)

同样创建配置和数据目录:

mkdir -p /docker/slave/date
vi /docker/slave/my.cnf

配置内容(注意 server_id 不同):

[mysqld]
user=mysql
port=33081
datadir=/var/lib/mysql
log_error=myerror.log
server_id=2
log-bin=mysql-bin
binlog_format=ROW

启动从库容器:

docker run --name slave \
  -p 33081:33081 \
  -v /docker/slave/date:/var/lib/mysql \
  -v /docker/slave/my.cnf:/etc/my.cnf \
  -e MYSQL_ROOT_PASSWORD=mysql \
  -d mysql/mysql-server:8.0

🔗 第三步:配置主从复制

1. 登录主库创建复制账号

docker exec -it master mysql -uroot -pmysql

执行SQL:

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

2. 查看主库状态并记录关键信息

SHOW MASTER STATUS;

记下 File(如 mysql-bin.000003)和 Position(如 691)。

3. 查看主库容器IP地址

docker inspect master | grep "IPAddress"

例如得到:172.17.0.2

4. 在从库配置主从连接

登录从库:

docker exec -it slave mysql -uroot -pmysql

执行(替换为你实际的主库IP和刚才记录的 File、Position):

  CHANGE MASTER TO
  MASTER_HOST='172.17.0.2',
  MASTER_PORT=3308,
  MASTER_USER='slave',
  MASTER_PASSWORD='slave',
  MASTER_LOG_FILE='mysql-bin.000003',
  MASTER_LOG_POS=691,
  GET_MASTER_PUBLIC_KEY=1;

⚠️ 注意:GET_MASTER_PUBLIC_KEY=1 是 MySQL 8.0 特有的参数,其他版本不需要!

5. 启动从库复制进程

START SLAVE;

6. 检查从库状态

SHOW SLAVE STATUS\G

查看 Slave_IO_Running 和 Slave_SQL_Running 是否都为 Yes,如果是,说明主从复制已成功建立!

✅ 验证主从同步

在主库创建一个测试数据库或表:

CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE users(id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users VALUES(1, 'Docker');

在从库检查是否同步:

SHOW DATABASES;
USE test_repl;
SELECT * FROM users;

如果看到相同的数据,主从复制已正常工作!🎉

📝 总结

通过以上步骤,我们成功使用Docker快速搭建了一套MySQL 8.0主从复制环境。这种方法不仅隔离性好、便于管理,还可以轻 松 扩展到多个从库,适合开发、测试甚至生产环境使用。




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3117156/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-10-13

  • 博文量
    90
  • 访问量
    85391