ubuntu docker mysql 主主互备
时间: 2025-05-18 16:11:43 浏览: 22
### 实现Ubuntu Docker环境下MySQL主主互备的配置方案
要在Ubuntu系统上通过Docker实现MySQL主主互备(Master-Master Replication),需要完成以下几个核心部分:
#### 1. 启动两个MySQL容器
创建并运行两个独立的MySQL实例作为主节点。可以使用以下命令分别启动 `MySQL_Master1` 和 `MySQL_Master2` 容器。
```bash
docker run -it --name MySQL_Master1 \
-e MYSQL_ROOT_PASSWORD='123456' \
-p 3000:3306 \
-v /mydata/mysql-master1/conf:/etc/mysql \
-v /mydata/mysql-master1/data:/var/lib/mysql \
-d mysql:5.7 [^1]
docker run -it --name MySQL_Master2 \
-e MYSQL_ROOT_PASSWORD='123456' \
-p 3001:3306 \
-v /mydata/mysql-master2/conf:/etc/mysql \
-v /mydata/mysql-master2/data:/var/lib/mysql \
-d mysql:5.7 [^1]
```
上述命令中,`-p` 参数用于映射主机端口到容器内部端口;`-v` 参数挂载本地配置文件和数据目录至容器内路径。
---
#### 2. 配置MySQL Master-Master复制参数
编辑两台MySQL服务的配置文件 `/etc/mysql/my.cnf`,设置不同的 `server-id` 并启用二进制日志记录功能。
对于 **MySQL_Master1** 的配置如下:
```ini
[mysqld]
server_id=101
log-bin=mysql-bin
binlog-do-db=testdb
binlog-ignore-db=mysql
replicate-same-server-id=0
auto-increment-offset=1
auto-increment-increment=2
expire_logs_days=7
slave-skip-errors=all
```
对于 **MySQL_Master2** 的配置如下:
```ini
[mysqld]
server_id=102
log-bin=mysql-bin
binlog-do-db=testdb
binlog-ignore-db=mysql
replicate-same-server-id=0
auto-increment-offset=2
auto-increment-increment=2
expire_logs_days=7
slave-skip-errors=all
```
以上配置中的关键点包括:
- `server_id`: 主机ID需唯一。
- `log-bin`: 开启二进制日志支持。
- `binlog-do-db/testdb`: 指定要同步的数据库名。
- `auto-increment-*`: 控制自增列的行为以防止冲突[^3]。
完成后重启容器使更改生效:
```bash
docker restart MySQL_Master1
docker restart MySQL_Master2
```
---
#### 3. 创建用户并授权跨服务器访问权限
进入第一个MySQL容器执行SQL语句来授予远程连接权限给另一个主节点上的账户。
登录到 `MySQL_Master1` 中:
```sql
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
```
同样,在第二个容器 `MySQL_Master2` 上也创建相同的用户名及其密码以便双向通信。
---
#### 4. 获取当前状态信息
在每台机器上查询其最新的二进制位置信息供对方参照设定初始起点。
针对 `MySQL_Master1` 执行:
```sql
SHOW MASTER STATUS;
```
记下返回的结果字段 File 和 Position 值。
接着切换到另一侧即 `MySQL_Master2` 进行相同操作获取对应的数据。
---
#### 5. 设置Slave关系
回到各自的服务里指派彼此成为自己的从属角色。
于 `MySQL_Master1` 输入下面这段脚本指向第二台设备充当它的副本源:
```sql
CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_USER='repl_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.xxxxxx',
MASTER_LOG_POS=yyyyyy;
START SLAVE;
```
注意替换其中变量为之前收集的具体数值以及实际IP地址而非循环回送接口(`localhost`)。
同理处理反向关联让 `MySQL_Master2` 认可前者为主控方即可达成双工模式运作效果[^2]。
---
#### 总结
至此已经完成了基于Docker技术构建起Linux平台下的分布式存储架构解决方案之一种形式—MySQL双重领导型复制机制部署流程说明文档撰写完毕!
阅读全文
相关推荐

















