ARTICLE · 1144293
Docker安装mysql详细教程, mysqld: Can't read dir of '/etc/mysql/conf.d/'(已解决)
文章目录
一、下载MySQL的docker镜像 二、启动MySQL容器 2.1 命令 2.2 报错mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory) 三、进入mysql容器 四、修改mysql默认配置 4.1 查看mysql挂载的文件夹 4.2 mysql配置 五、补充
如果还没在虚拟机/服务器中安装docker,可以查阅相关文档 先安装docker。
一、下载MySQL的docker镜像
拉取镜像的命令为 docker pull 镜像名:tag 或 docker pull 镜像名,前者拉取指定版本的镜像、后者拉取最新版本的镜像。此处拉取mysql 5.7
docker pull mysql:5.7如果提示权限不足的话,需要使用管理员的方式执行: sudo docker pull mysql:5.7。可通过 docker images查看拉取成功的镜像。
二、启动MySQL容器
2.1 命令
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=123456 \-d mysql:5.7参数说明 -p 3306:3306:将容器的3306端口映射到主机的3306端口。如果本地已安装mysql或其他应该占用了3306端口,可使用其他端口 -p port1:3306,保证port1端口未被占用即可 -v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机 -v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机 -v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机 -e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码
或者直接在/mydata/mysql/conf/目录下新建my.cnf文件,执行如下命令:
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/my.cnf:/etc/mysql/my.cnf-e MYSQL_ROOT_PASSWORD=123456 \-d mysql:5.72.2 报错mysqld: Can’t read dir of ‘/etc/mysql/conf.d/’ (Errcode: 2 - No such file or directory)
补充:在启动mysq容器、即执行docker run -p xxx时,docker ps看不到创建的mysql容器,使用docker logs mysql发现报错,mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
原因:这意味着 MySQL 在启动时无法找到 /etc/mysql/conf.d/ 目录,mysql容器的/etc/mysql目录挂载到宿主机的 /mydata/mysql/conf目录,这通常是因为这个目录在你挂载的配置卷 /mydata/mysql/conf 中不存在或没有正确创建,导致容器创建失败。
解决方法:
检查本地配置目录:检查宿主机的 /mydata/mysql/conf 目录中是否存在 conf.d 和 mysql.conf.d 子目录,如果不存在,创建这个子目录。
# 创建子目录mkdir -p /mydata/mysql/conf/conf.dmkdir -p /mydata/mysql/conf/mysql.conf.d此时,可以通过命令进入conf 检查是否已经存在子目录
cd /mydata/mysql/confls删除或重命名旧容器:
# 删除它,以释放容器名称(推荐)docker rm mysql# 重命名旧容器docker rename mysql old_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=123456 \-d mysql:5.7此时,通过命令可以查看是否可以已经启动MySQL容器
docker ps也可通过Navicat等工具远程连接mysql。
至此,mysql已安装成功,接下来我们来修改配置。
三、进入mysql容器
docker exec -it mysql /bin/bash使用MySQL命令打开客户端:
mysql -uroot -p mysql -uroot -p密码 --default-character-set=utf8 
四、修改mysql默认配置
4.1 查看mysql挂载的文件夹
由于在创建实例的时候,已经将部分文件夹挂载到Linux宿主机目录下,所以当我们修改一些mysql的配置文件时,不需要再进入docker环境下,直接在Linux环境下操作即可。挂载的目录为:
cd /mydata/mysql4.2 mysql配置
Linux 操作系统中 MySQL 的配置文件是 my.cnf,一般会放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目录下。内容一般为:
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = utf8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshakeskip-name-resolve1)宿主机进入mysql的conf目录,新建my.conf文件,写入内容:
cd /mydata/mysql/conflsvi my.cnf# 在my.cnf中插入上述my.cnf内容,保存退出#重启mysqldocker psdocker restart mysql2)进入mysql容器内部,查看文件是否配置成功
docker exec -it mysql /bin/bashcd /etc/mysqllscat my.cnf
五、补充
1)设置mysql每次开机随docker自启动
可以使用docker run命令时加上--restart选项,或者在容器创建后更改其重启策略
docker run -d --restart=always --name yourContainerName yourImage这里的--restart=always选项确保无论退出代码是什么,只要Docker守护程序启动,容器都会自动重启。
如果容器已经运行,您可以使用docker update命令更改重启策略
docker update mysql-container --restart=always2)如果想 设置docker服务开机自启动,可使用如下命令:
systemctl enable docker