基于 Docker 搭建 MySQL 主从复制
搭建环境
- Docker 18.09.2
- MySQL 5.7.13
- Mac
安装Docker
- 验证:docker version
启动Docker
安装MySQL
- 使用Docker拉取MySQL镜像:docker pull mysql:5.7.13
- 运行主容器
# --name 为容器指定名称,这里是master
# -p 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口
# -e 设置环境变量,这里是指定root账号的密码为root
# -d 后台运行容器,并返回容器ID mysql:5.7.13 指定运行的mysql版本
docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
- 验证是否启动成功:docker ps -a
创建master的复制账号
- 使用Navicat登录
- 连接名 Master
- 主机名或IP地址 127.0.0.1
- 端口号 3306
- 用户名 root
- 密码 root
- 创建账号
GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'backup';
FLUSH PRIVILEHES;
SHOW GRANTS FOR 'backup'@'%';
修复MySQL配置信息
- 创建目录
- /opt/mysql/master
- /opt/mysql/slave1
- 从容器中拷贝一份MySQL配置
docker cp master:/etc/mysql/my.cnf /opt/mysql/master
docker cp slave1:/etc/mysql/my.cnf /opt/mysql/slave1
- 修改/opt/mysql/master/my.cnf
#[mysqld] 在该节点后加上
#log-bin=mysql-bin使用binary logging,mysql-bin是log文件名的前缀
#server-id=1唯一服务器ID
log-bin=mysql-bin
server-id=1
- 修改/opt/mysql/slave1/my.cnf
#[mysqld] 在该节点后加上
log-bin=mysql-bin
server-id=2
- 将修改后的文件覆盖Docker中MySQL配置文件
docker cp /opt/mysql/master/my.cnf master:/etc/mysql/my.cnf
docker cp /opt/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf
- 重启Docker 让配置生效
docker restart master
docker restart slave1
配置主从复制
- 使用Navicat登录
- 连接名 Slave1
- 主机名或IP地址 127.0.0.1
- 端口号 3307
- 用户名 root
- 密码 root
- 执行以下SQL
#查看容器运行的各种数据 docker inspect master
#MASTER_HOST的IP可以通过 docker inspect master 查看
CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_PORT=3306,MASTER_USER='backup',MASTER_PASSWORD='backup';
START SLAVE;
- 验证,检查配置是否成功
# Slave_IO_State字段状态
#Waiting for master to send event 正常
#Connecting to master 配置失败,具体原因查看日志追踪 docker logs slave1 -f
# Slave_IO_Running 字段为 Yes
# Slave_SQL_Running 字段为 Yes
SHOW SLAVE STATUS;
测试
在master上创建数据库、表、插入数据,看看再salve1上是否存在。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· 一文搞懂MCP协议与Function Call的区别
· 如何不购买域名在云服务器上搭建HTTPS服务