草庐IT

mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 2 - No such file or directory

倒在程序员大门前 2023-04-21 原文

记录一个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

有关mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 2 - No such file or directory的更多相关文章

  1. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  2. ruby CSV : How can I read a tab-delimited file? - 2

    CSV.open(name,"r").eachdo|row|putsrowend我得到以下错误:CSV::MalformedCSVErrorUnquotedfieldsdonotallow\ror\n文件名是一个.txt制表符分隔文件。我是专门做的。我有一个.csv文件,我转到excel,并将文件保存为.txt制表符分隔的文件。所以它是制表符分隔的。CSV.open不应该能够读取制表符分隔的文件吗? 最佳答案 尝试像这样指定字段分隔符:CSV.open("name","r",{:col_sep=>"\t"}).eachdo|row|

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  5. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  6. ruby - 混帐 & ruby : How can I unset the GIT_DIR variable from inside a ruby script? - 2

    我编写了一个非常简单的“部署”脚本,作为我的裸git存储库中的post-updateHook运行。变量如下livedomain=~/mydomain.comstagingdomain=~/stage.mydomain.comgitrepolocation=~/git.mydomain.com/thisrepo.git(bare)core=~/git.mydomain.com/thisrepo.gitcore==addedremoteintoeachlive&stagegitslive和stage都初始化了gitrepos(非裸),我已经将我的裸仓库作为远程添加到它们中的每一个(名为co

  7. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  8. ruby-on-rails - 在 Ruby 或 Rails 中,hash.merge({ :order => 'asc' }) can return a new hash with a new key. 什么可以返回带有已删除键的新散列? - 2

    在Ruby(或Rails)中,我们可以做到new_params=params.merge({:order=>'asc'})现在new_params是一个带有添加键:order的散列。但是是否有一行可以返回带有已删除key的散列?线路new_params=params.delete(:order)不会工作,因为delete方法返回值,仅此而已。我们必须分3步完成吗?tmp_params=paramstmp_params.delete(:order)returntmp_params有没有更好的方法?因为我想做一个new_params=(params[:order].blank?||para

  9. ruby - 类型错误 : can't convert String into Integer - 2

    我有代码:classScenedefinitialize(number)@number=numberendattr_reader:numberendscenes=[Scene.new("one"),Scene.new("one"),Scene.new("two"),Scene.new("one")]groups=scenes.inject({})do|new_hash,scene|new_hash[scene.number]=[]ifnew_hash[scene.number].nil?new_hash[scene.number]当我启动它时出现错误:freq.rb:11:in`[]'

  10. ruby : How can I detect/intelligently guess the delimiter used in a CSV file? - 2

    我需要能够确定我的Ruby项目中的csv文件中使用了哪个分隔符(逗号、空格或分号)。我知道,csv模块中的Python中有一个Sniffer类,可用于猜测给定文件的分隔符。Ruby中有类似的东西吗?非常感谢任何形式的帮助或想法。 最佳答案 看起来py实现只检查几种方言:excel或excel_tab。因此,仅检查","或"\t"的简单实现是:COMMON_DELIMITERS=['","',"\"\t\""].freezedefsniff(path)first_line=File.open(path).firstreturnunle

随机推荐