Bootstrap

docker0网卡消失不见导致 mysql容器主从复制失败显示为:Slave_IO_Running: Connecting Slave_SQL_Running: Yes

host: 192.168.0.105

问题:在docker安装mysql容器后,在同一节点上使用两个mysql容器建立主从复制,其中主mysql容器映射到13306,从mysql容器映射到13307

Ubuntu中通过Docker安装配置MySQL主从节点 - 大杂草 - 博客园 (cnblogs.com)完成主从配置之后 使用show slave status \G;查看,发现: 

Slave_IO_State: Connecting to master

Slave_IO_Running: Connecting 

Slave_SQL_Running: Yes

正确应该是都为YES,这之后通过验证也发现了主从复制没有成功 

尝试以下方法均失败:

1.检查server-id确保了是不相同的

2.确保了防火墙是关闭的

3.确保配置时从容器的MASTER_LOG_FILE='xxxx',MASTER_LOG_POS=xxx;与主容器一致

4.确保了slave账号权限密码之类的设置正确

5.确保mysql配置文件正确

6:确保13307和13306端口在被正常监听:sudo netstat -tuln | grep 13306/sudo netstat -tuln | grep 13307,并且0.0.0.0表示接受来自任意ip的请求

解决:

测试13306端口

telenet localhost 13306

发现可以连通,

telenet 192.168.0.105 13306

发现不能连通

但192.168.0.105就是主机节点的ip地址

使用ifconfig 发现没有docker0网卡,使用ifconfig docker0发现网卡没有分配地址

尝试手动创建一条docker0网卡配置连接 

查看所有网络连接的详细信息,发现有多个无用的docker0连接

nmcli connection show

将其全部删除

nmcli connection delete uuid 98a9e3a3-cb78-43be-9cf3-d612d5c7fb36
nmcli connection delete uuid 0f02cb43-0b28-4103-a883-07f5c7b9bd6e

然后手动创建一条  建议使用 172.17.0.1/16

sudo nmcli connection add type bridge ifname docker0 con-name docker0  ip4 172.17.0.1/16 autoconnect true 

重启docker和网络服务

sudo systemctl restart NetworkManager
sudo systemctl restart docker

ifconfig查看 发现成功启动

在docker中启动之前mysql的两个主从容器 并对主从复制信息重新配置

在maste容器

进入主容器中 (mysql-master为容器名称)

docker exec -it mysql-master mysql -u root -p

查看容器状态

show master status;

在slave容器:

另开一个会话窗口进入从容器中 (mysql-slave为容器名称)

docker exec -it mysql-slave mysql -u root -p

关闭主从复制线程

stop slave;

根据主容器的status信息,完成主从复制的重新配置

CHANGE MASTER TO MASTER_HOST='192.168.0.105',MASTER_PORT=13306,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='log.000004',MASTER_LOG_POS=154;

重新启动线程

start slave;

查看主从复制状态  发现信息正确都为YES 主从复制功能正常

show slave status \G;

总结:docker0网卡丢失,导致docker给容器分配地址后 两个容器直接不能正常通信以完成mysql的主从复制。

;