mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 2 - No such file or directory
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
记录一个docker 安装mysql的小问题查了一下网上说的说的是权限的问题但是我仔细一瞧发现并不是权限问题的话应该是这样的
mysqld:Can’t read dir of ‘/etc/mysql/conf.d’
(Errcode:13 -Permission denied) mysqld:[ERROR]Fat
在容器的运行命令加上
–privileged=true即可
但是我试着没有效果很明显我这个并不是权限的问题后来想到有可能是挂载目录出现的问题。结果还真是。用如下的方法就能解决。
首先拉取镜像
docker pull mysql:5.7
然后安装mysql
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
但是通过命令docker ps查看没有这个容器
docker ps
查看运行日志docker logs 容器id
查看容器id(以下命令可以查看全部容器包括启动失败的)
docker ps -a
查看容器的启动日志
docker logs 33e03e9baa15
报错如下:
就是不存在/etc/mysql/conf.d这个目录
原因:
我们在书写创建容器的命令出了问题
我们这个挂载目录出了问题我的理解是mysql容器的/etc/mysql目录挂载到宿主机的 /mydata/mysql/conf目录由于宿主机的 /mydata/mysql/conf是空的所以找不到/etc/mysql/conf.d中conf.d这个目录导致容器创建失败。我这么做的目的是将配置文件挂载到宿主机但是 我查看mysql官网发现这个挂载方式已经不适用了配置文件已经不再/etc/mysql里了里面只有两个空目录分别是conf.d和mysql.conf.d,这两个目录里面什么都没有。真正的配置文件是/etc/my.cnf因此需要修改。
mysql官网地址
解决方法:先随意创建一个mysql容器
docker run -d -e MYSQL_ROOT_PASSWORD=root mysql:5.7
查看运行的容器
docker ps
将mysql容器中的/etc/mysql中的mysql目录下的文件复制到宿主机/mydata/mysql/conf目录下
命令格式:docker cp 容器id:容器内目录 宿主机目录
docker cp 4b1a0fe53315:/etc/mysql/ /mydata/mysql/conf
这样的话/mydata/mysql/conf下就有conf.d和mysql.conf.d两个空文件夹了查看 官网说明/etc/my.cnf里面有以下两行大意就是my.cnf这个配置文件又包含了/etc/mysql/conf.d/和/etc/mysql/mysql.conf.d/目录下的配置文件所以我们可以把cnf后缀结尾的配置文件放进下面 两个文件夹中达到修改默认配置的作用。
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
然后把这个容器删掉
docker rm -f 4b1a0fe53315
创建一个mysql:5.7.9的容器复制/etc/mysql/my.cnf
docker run -d -e MYSQL_ROOT_PASSWORD=root mysql:5.7.9
docker cp 4b1a0fe53315:/etc/mysql/my.cnf /mydata/mysql/conf/mysql.conf.d
然后把这个容器删掉
重新创建一个容器
docker run -p 3306:3307 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
查看容器是否成功运行如下图可以看到容器正常运行了说明已经成功了。
docker ps