开发者

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 镜像名:tagdocker pull 镜像名,前者拉取指定版本的镜像、后者拉取最新版本的镜像。

        此处拉取mysql 5.7

        docker pull mysql:5.7
        • 如果提示权限不足的话,需要使用管理员的方式执行androidsudo 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/libZBTwahM/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/candroidonf/目录下新建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.dmysql.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   

        Docker安装mysql教程以及解决mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘问题

        四、修改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

        Docker安装mysql教程以及解决mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘问题

        五、补充

        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

        总结

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜