dockermysql8.0主从复制
时间: 2025-04-18 19:47:27 浏览: 20
### 配置Docker环境下的MySQL 8.0主从复制
#### 准备工作
为了实现MySQL 8.0的主从复制,在Docker环境中需先获取MySQL镜像并创建必要的数据卷。
下载指定版本的MySQL镜像:
```bash
docker pull mysql:8.0.36
```
为本地服务器上的MySQL实例准备持久化存储路径,例如 `/Users/docker/data/mysql/`[^1]。
#### 启动主节点服务
启动主节点时,通过挂载自定义配置文件和数据目录来确保其稳定性和灵活性:
```bash
docker run --name=mysql_master \
-p 3301:3306 \
--privileged=true \
-v /path/to/master/conf.d:/etc/mysql/conf.d \
-v /path/to/master/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
-d mysql:8.0.36
```
其中 `-v` 参数用于映射主机与容器间的文件夹;`-e` 设置环境变量以初始化root用户的密码[^4]。
#### 修改主节点配置
进入正在运行中的MySQL Master容器内部修改配置文件 `my.cnf` 或者新增一个 `.cnf` 文件到 `/etc/mysql/conf.d/` 下面。编辑内容如下所示:
```ini
server-id=1
log-bin=/var/log/mysql/mysql-bin.log
binlog-format=row
gtid-mode=ON
enforce-gtid-consistency=ON
```
这些参数的作用分别是设定唯一的Server ID、开启二进制日志记录功能以及启用全局事务ID支持GTIDs[^2]。
#### 初始化主节点数据库
连接至Master MySQL客户端执行SQL语句激活相关特性:
```sql
SET GLOBAL gtid_purged=''; FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS\G;
UNLOCK TABLES;
```
上述操作可以清除可能存在的旧GTID集合,并展示当前master状态以便后续slave同步使用[^3]。
#### 启动从节点服务
同样方式启动Slave节点,区别在于需要调整部分参数适应于跟随角色:
```bash
docker run --name=mysql_slave \
-p 3302:3306 \
--privileged=true \
-v /path/to/slave/conf.d:/etc/mysql/conf.d \
-v /path/to/slave/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
-d mysql:8.0.36
```
注意这里监听不同端口(如3302),防止冲突。
#### 修改从节点配置
对于Slave而言,除了保持一致的基础设置外还需要额外指明自己的身份编号:
```ini
server-id=2
relay-log=/var/log/mysql/mysql-relay-bin.log
read-only=ON
gtid-mode=ON
enforce-gtid-consistency=ON
```
此处在原有基础上增加了只读模式(`read-only`) 和继电器日志 (`relay-log`) 的配置项[^5]。
#### 建立主从关联
回到Master端授权给远程访问权限,并记下授予的信息供Slave连接验证:
```sql
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
```
接着前往Slave端输入之前获得的状态信息完成最终绑定过程:
```sql
CHANGE MASTER TO
MASTER_HOST='<master_ip>',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION = 1;
START SLAVE;
```
最后确认两者间已经成功建立了联系可以通过查询 Slave_IO_Running 及 Slave_SQL_Running 字段均为 Yes 来判断。
阅读全文
相关推荐

















