文章目录
一、下载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 命令
代码语言:sh复制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文件,执行如下命令:
代码语言:sh复制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 检查是否已经存在子目录
代码语言:sh复制cd /mydata/mysql/conf
ls
删除或重命名旧容器:
代码语言:sh复制# 删除它,以释放容器名称(推荐)
docker rm mysql
# 重命名旧容器
docker rename mysql old_mysql
重启容器:
代码语言:sh复制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容器
代码语言:sh复制docker ps
也可通过Navicat等工具远程连接mysql。
至此,mysql已安装成功,接下来我们来修改配置。
三、进入mysql容器
代码语言:bash复制docker exec -it mysql /bin/bash
使用MySQL命令打开客户端:
代码语言:bash复制mysql -uroot -p
mysql -uroot -p密码 --default-character-set=utf8
四、修改mysql默认配置
4.1 查看mysql挂载的文件夹
由于在创建实例的时候,已经将部分文件夹挂载到Linux宿主机目录下,所以当我们修改一些mysql的配置文件时,不需要再进入docker环境下,直接在Linux环境下操作即可。挂载的目录为:
代码语言:shell复制cd /mydata/mysql
4.2 mysql配置
Linux 操作系统中 MySQL 的配置文件是 my.cnf,一般会放在 /etc/my.cnf 或 /etc/mysql/my.cnf 目录下。内容一般为:
代码语言:properties复制[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文件,写入内容:
代码语言:sh复制cd /mydata/mysql/conf
ls
vi my.cnf
# 在my.cnf中插入上述my.cnf内容,保存退出
#重启mysql
docker ps
docker restart mysql
2)进入mysql容器内部,查看文件是否配置成功
代码语言:sh复制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服务开机自启动,可使用如下命令:
代码语言:sh复制systemctl enable docker