dockerMySQL主从gtid
时间: 2025-04-09 21:16:56 浏览: 28
<think>好的,用户需要关于在Docker环境下配置MySQL主从复制并使用GTID的教程以及常见问题解决方案。首先,我需要回忆一下相关的步骤和注意事项。根据提供的引用内容,特别是引用[2]提到GTID需要MySQL 5.6及以上版本,所以需要确认Docker镜像的版本是否符合要求。
首先,用户可能已经知道如何拉取MySQL镜像,但需要明确版本。比如使用mysql:5.7,因为5.7版本支持GTID。然后,主从服务器的配置文件是关键部分,需要正确设置server-id、启用GTID模式,以及配置binlog格式。引用[5]中提到在my.cnf中加入secure_file_priv配置,这可能与文件权限有关,需要注意。
接下来是创建主从容器的步骤,包括映射端口和数据卷。主库需要创建复制用户,从库需要配置主库的信息,并使用MASTER_AUTO_POSITION=1来启用GTID。在启动从库复制时,可能会遇到错误,比如网络问题或者配置错误,需要检查日志。
常见问题部分,用户可能会遇到Slave_IO_Running或Slave_SQL_Running为No的情况,这时候需要查看错误日志,可能是主从server-id重复,或者GTID配置不正确。另外,数据不一致的问题可能需要重新导入全量数据并设置gtid_purged,如引用[5]中的解决方法。此外,防火墙和端口问题也是常见问题,需要确保容器间通信正常,端口正确映射,如引用[3]中的端口配置。
最后,引用中的资料提供了参考博客链接,可以建议用户查阅这些资源获取更详细的信息。需要确保回答结构清晰,分步骤说明配置过程,并列出常见问题及解决方法,帮助用户逐步解决问题,同时保持语言简洁明了。</think>### Docker下MySQL主从复制GTID配置教程
#### 一、环境准备
1. 使用支持GTID的MySQL镜像(建议选择5.7及以上版本):
```bash
docker pull mysql:5.7
```
2. 创建专用网络(确保主从容器的网络互通):
```bash
docker network create mysql-replica-net
```
#### 二、主库配置
1. **配置文件`master.cnf`**:
```ini
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
secure_file_priv=/var/lib/mysql # 解决导出权限问题[^5]
```
2. **启动主库容器**:
```bash
docker run -d --name=mysql-master --network=mysql-replica-net \
-v /path/master.cnf:/etc/mysql/conf.d/master.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 mysql:5.7
```
3. **创建复制账号**:
```sql
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_pass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
```
#### 三、从库配置
1. **配置文件`slave.cnf`**:
```ini
[mysqld]
server-id=2
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
```
2. **启动从库容器**:
```bash
docker run -d --name=mysql-slave --network=mysql-replica-net \
-v /path/slave.cnf:/etc/mysql/conf.d/slave.cnf \
-e MYSQL_ROOT_PASSWORD=123456 \
-p 3307:3306 mysql:5.7
```
3. **配置主从关系**:
```sql
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='repl_pass',
MASTER_AUTO_POSITION=1;
START SLAVE;
```
#### 四、验证配置
1. **查看主库GTID状态**:
```sql
SHOW MASTER STATUS\G
```
输出应包含`Executed_Gtid_Set`字段。
2. **检查从库复制状态**:
```sql
SHOW SLAVE STATUS\G
```
关键指标:
- `Slave_IO_Running: Yes`
- `Slave_SQL_Running: Yes`
- `Retrieved_Gtid_Set`与主库同步
---
### 常见问题解决
#### 1. **Slave_IO线程报错`Got fatal error 1236`
- **原因**:主从GTID序列不连续
- **解决方案**:
```sql
STOP SLAVE;
RESET MASTER; -- 从库执行(会清空现有数据)
SET @@GLOBAL.GTID_PURGED='主库的Executed_Gtid_Set';
START SLAVE;
```
#### 2. **数据不一致导致复制中断**
- **场景**:从库写入非复制数据
- **修复步骤**:
1. 主库导出全量数据:`mysqldump -uroot -p --all-databases --set-gtid-purged=ON > dump.sql`
2. 从库导入数据前执行:`RESET MASTER;`
#### 3. **容器间网络不通**
- **现象**:`Slave_IO线程`显示`Connecting`
- **排查**:
```bash
docker exec -it mysql-slave ping mysql-master # 测试容器间DNS解析
```
---
阅读全文
相关推荐
















