前言
很开心这个问题今天终于被我解决掉了,一直从2022年暑假中期持续到现在每天都在想着这个事情,问题出发点还得从暑假学Dcoker说起,在学习Docker基础的时候很顺利用了不到一周时间,当用Docker搭建一些基础的服务器环境时遇到了麻烦,期间抽出过一天专门解决这个问题但是没有解决掉,对自己很是打击。说到底是一个小问题说到底也是个大问题,可以体现出自己的基础很不牢固。今天我将细细说一下为什么会有这种问题,刚开始为什么解决不掉,是对自己的成长的一次记录,也希望在大家遇到困难的时候能够帮助到大家。
问题描述
测试自己遇到的是哪一种类型
用户权限不够
主数据库中创建并授权的用户应该可以在任何主机访问主数据库,或者说在指定节点可以访问主数据库,可以先在另一台主机上登录授权的账号,检测能不能登上以及权限是不是正常。我这里用的是SQLyog(我的账号授权是正常的)
看错误状态码
在问候了百度很多次,自己的问题依然没有得到解决时可以看看自己的错误状态码,因为不同的错误状态码可能对应的报错信息一样(难以辨别),但解决方法千差万别,错误状态码在下图所示位置,根据自己的状态码检索解决方案。
查看错误日志
这种方案应该是最为稳妥的,可以从错误日志中清楚地发现是什么错误。博主能力有限没能将数据库错误日志玩明白,只是进行了一些探索,现在将探索进度给大家。
错误日志存放的位置
网上有一部分解释是说放在了data目录下的.err文件
有的说是在var/log/mysqld.log内
我在docker中查看半天没有找到。。。。。。如果哪个大佬知道在哪可以给我分享一下
现在我将如何操作容器内部数据文件的指令分享给大家大家自己探索
查看有哪些容器
docker ps
根据容器id查看该容器根目录下有哪些目录(查看更多只用拼接目录路径即可)
docker exec 容器id ls -a /
查看文件详细信息
docker exec 容器id ls -al /
查看文件内容
docker exec 容器id cat 路径/文件名 • 1
想要拷贝某个文件目录或者文件,用下面的命令
docker cp 容器id:/要拷贝的文件目录 /目的地 • 1
解决方案
权限不够,重新授权
--授权操作 set global validate_password_policy=0; set global validate_password_length=1; grant replication slave on *.* to 'slave'@'%' identified by '123456'; --刷新权限 flush privileges;
解释
set global validate_password_policy=0; 这个命令将密码设置为最低级别的,Mysql的密码级别有三种,0级别,1级别,2级别 0级别允许是纯数字,1级别必须包含数字和字母,2级别必须数字,大小写字母都包含。
set global validate_password_length=1;密码长度最短可为1
grant replication slave on . to ‘slave’@‘%’ identified by ‘123456’;赋予用户主从复制权限,在任何主机均可访问,用户名为slave密码为123456
错误状态码2003,关闭主机防火墙
用户赋予权限没有错误的话大概率是这里出问题了,看一下自己的报错码是不是2003,如果是的话可以按照这个方法解决slave_IO_Running: Connecting and Last_IO_Errno: 2003
解决方案:
service iptables stop
如果执行之后报错如下图请继续往下看
原因可能是:
centos 7.0以下基于iptables
CentOS 7.0默认使用的是firewall作为防火墙(须执行下面的语句1,语句2根据自己的需求执行)
语句1、直接关闭防火墙
systemctl stop firewalld.service
语句2、禁止firewall开机启动
systemctl disable firewalld.service
通过以上两个方法大概可以解决80%以上的该类型问题了。