Docker安装mysql教程以及解决mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘问题
作者:寻求出路的程序媛
如果还没在虚拟机/服务器中安装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.7
2.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.d mkdir -p /mydata/mysql/conf/mysql.conf.d
此时,可以通过命令进入conf 检查是否已经存在子目录
cd /mydata/mysql/conf ls
删除或重命名旧容器:
# 删除它,以释放容器名称(推荐) 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/mysql
4.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=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve
1)宿主机进入mysql的conf目录,新建my.conf文件,写入内容:
cd /mydata/mysql/conf ls vi my.cnf # 在my.cnf中插入上述my.cnf内容,保存退出 #重启mysql docker ps docker restart mysql
2)进入mysql容器内部,查看文件是否配置成功
docker exec -it mysql /bin/bash cd /etc/mysql ls cat 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=always
2)如果想 设置docker服务开机自启动,可使用如下命令:
systemctl enable docker
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。