首页 > 数据库 > MySQL > 基于Docker的MySQL主从复制环境搭建指南
在现代数据库架构中,主从复制是保证数据高可用和负载均衡的常用方案。而借助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/ ,如需转载,请注明出处,否则将追究法律责任。