Linux之MySQL数据库主从复制及错误Slave_IO_Running: Connecting,Last_IO_Errno:2003解决方案

MySQL数据库主从复制(基于Docker)的操作步骤如下:

基本环境

  • 虚拟机VMWare WorkStation 15 Pro
  • CentOS 7
  • MySQL-5.7 Latest
  • Docker

创建文件夹

mkdir -p /home/wing/mysql/master/data
mkdir -p /home/wing/mysql/master/conf
mkdir -p /home/wing/mysql/master/logs
mkdir -p /home/wing/mysql/slave/data
mkdir -p /home/wing/mysql/slave/conf
mkdir -p /home/wing/mysql/slave/logs

Master文件夹

Salve文件夹

修改Master配置文件

vi /home/wing/mysql/master/conf/my.cnf 

添加如下内容:

[mysqld]
log-bin = mysql-bin 
server-id = 1 

修改Slave配置文件

vi /home/wing/mysql/slave/conf/my.cnf

添加如下内容:

[mysqld]
log-bin = mysql-bin 
server-id = 101 

启动Master

docker run --name mysql-master -v /home/wing/mysql/master/data:/var/lib/mysql -v /home/wing/mysql/master/conf:/etc/mysql/conf.d -v/home/wing/mysql/master/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 5306:3306 -d mysql:5.7

备注:如果本地没有MySQL-5.7新版的docker镜像,那么会从docker镜像仓库拉取MySQL-5.7最新版本的镜像,视网络情况需要花费一点时间。

启动Slave

docker run --name mysql-slave -v /home/wing/mysql/slave/data:/var/lib/mysql -v /home/wing/mysql/slave/conf:/etc/mysql/conf.d -v /home/wing/mysql/slave/logs:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 5307:3306 -d mysql:5.7

进入Master容器,并执行下述命令

docker exec -it mysql-master /bin/bash   #进入master容器内部
mysql -uroot -p                          #连接数据库
show master status;                      #查看master状态
CREATE USER 'wing'@'%' IDENTIFIED BY '123456';  #创建账号
GRANT ALL ON *.* TO 'wing'@'%';                 #授权

进入Slave容器,并执行下述命令

docker exec -it mysql-slave /bin/bash      #进入slave容器
mysql -uroot -p                            #连接数据库
change master to master_host='IP地址', master_port=5306,master_user='wing',master_password='123456', master_log_file='mysql-bin.000003',master_log_pos=154;            #设置master信息
start slave;                               #开启slave服务
show slave status \G;                      #查看slave状态

执行show slave status \G;之后出现了下述错误。

如上图所示:Slave_IO_Running: Connecting,同时错误信息Last_IO_Error:2003,详细错误连接master失败。连着操作了好几遍,都是这样的错误。在网上查了好多信息,引起这个错误的主要原因:

  • 网络不通                        #检查没有问题
  • 拼写错误                        #多次确认没问题
  • pos不对                         #多次确认没问题
  • MySQL配置文件问题     #确认没问题
  • 连接服务器时语法          #确认没问题
  • 主服务器MySQL权限     #确认没问题
  • 防火墙             

好吧,最后就确认防火墙设置了。

  • 查看防火墙状态
firewall-cmd --state

显示running,应该是防火墙没有关闭的原因。

  • 关闭防火墙服务
systemctl stop firewalld.service
  • 禁用防火墙服务
systemctl disable firewalld.service 
  • 同时修改selinux配置
vi /etc/selinux/config

SELINUX=enforcing改为

SELINUX=disabled
  • 重启
reboot

然后重新启动master,slave容器,进行配置操作,在slave容器配置好后执行show slave status \G;后。

在master创建数据库wing

create database wing;

在slave同步查看数据库

show databases;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值