当前位置: 首页 > news >正文

一起学docker系列之九docker运行mysql 碰到的各种坑及解决方法

目录

  • 前言
  • 1 Docker 运行mysql命令
  • 2 坑一:无法读取/etc/mysql/conf.d目录的问题
  • 3 坑二:/tmp/ibnr0mis 文件无法创建/写入的问题
  • 4 坑三:Navicat 连接错误(1045-access denied)
  • 5 坑四:MySQL 登录失败问题
  • 结语

前言

在使用 Docker 容器化 MySQL 过程中,遇到一系列常见问题是正常现象。通过以下步骤,可以解决这些问题,并成功搭建运行 MySQL 容器。

1 Docker 运行mysql命令

首先,运行 MySQL 容器的命令如下,对其中的参数进行详细说明:

mysql容器启动

docker run \
--name mysql5.7 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
-v ~/volumes/mysql5.7/data:/var/lib/mysql \
-v ~/volumes/mysql5.7/conf:/etc/mysql \
-v ~/volumes/mysql5.7/log:/var/log \
--restart=always mysql:5.7
  • docker run: 启动一个新容器
  • --name mysql5.7: 指定容器的名称为 mysql5.7
  • -p 3306:3306: 将容器的 3306 端口映射到宿主机的 3306 端口,允许通过该端口访问 MySQL 服务
  • -e MYSQL_ROOT_PASSWORD=123456: 设置 MySQL root 用户的密码为 123456
  • -d: 在后台运行容器
  • -v ~/volumes/mysql5.7/data:/var/lib/mysql: 将宿主机的 ~/volumes/mysql5.7/data 目录挂载到容器内的 MySQL 数据目录
  • -v ~/volumes/mysql5.7/conf:/etc/mysql: 将宿主机的 ~/volumes/mysql5.7/conf 目录挂载到容器内的 MySQL 配置文件目录
  • -v ~/volumes/mysql5.7/log:/var/log: 将宿主机的 ~/volumes/mysql5.7/log 目录挂载到容器内的 MySQL 日志目录
  • --restart=always: 设置容器遇到错误时自动重启
  • mysql:5.7: 使用 MySQL 5.7 版本的 Docker 镜像

2 坑一:无法读取/etc/mysql/conf.d目录的问题

在这里插入图片描述

当运行 MySQL 容器时,报错指示无法读取目录 /etc/mysql/conf.d。can‘t read dir of /etc/mysql/conf.d 。这通常是因为 MySQL 容器默认仅寻找特定目录,但我们想要自定义配置目录。解决方法是通过挂载卷将我们的配置文件目录映射到容器内 MySQL 配置目录的路径上。

解决方法:

停止并移除容器

docker stop mysql5.7
docker rm mysql5.7

重新运行容器,并指定配置目录

docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d \
-v /home/dockerv/mysql/data:/var/lib/mysql \
-v /home/dockerv/mysql/conf:/etc/mysql/conf.d \
-v /home/dockerv/mysql/log:/var/log \
--restart=always mysql:5.7

3 坑二:/tmp/ibnr0mis 文件无法创建/写入的问题

can’t create/write to file ‘/tmp/ibnr0mis’,查看/tmp的权限,果然是没有些权限,此处不是宿主机的/tmp目录,而是docker容器的/tmp目录,将整个宿主机的整个docker目录设置为可读可写。MySQL 在容器内尝试在 /tmp 目录下创建文件时遇到权限问题。这可能是因为容器内部的 /tmp 目录权限受限。解决此问题需要更改宿主机 Docker 目录的权限。

在这里插入图片描述

解决方法:

停止并移除容器

docker stop mysql5.7
docker rm mysql5.7

更改宿主机 Docker 目录权限

`chmod 777 -R /lib/docker`  # 根据实际情况修改路径

4 坑三:Navicat 连接错误(1045-access denied)

mysql启动起来了,但是使用navicat连接报错,1045-access denied for user root@192…(using password:yes),尝试使用 Navicat 连接 MySQL 时遇到访问被拒绝的问题。这可能是由于 MySQL 服务器拒绝了 root 用户的连接请求,需要在 MySQL 中修改配置以允许远程访问。

在这里插入图片描述

解决方法:

进入 Docker 容器

docker exec -it mysql5.7 /bin/bash

编辑 MySQL 配置文件

cd /etc/mysql/conf.d
vim my.cnf

在 my.cnf 文件中添加或修改以下内容:

[mysqld]
bind-address=0.0.0.0

5 坑四:MySQL 登录失败问题

登录 MySQL 时出现访问被拒绝的错误,这可能是由于权限设置不当导致 MySQL 忽略配置文件。

在这里插入图片描述

解决方法:

修改配置文件权限

chmod 644 /etc/my.cnf

进入 MySQL

docker exec -it mysql5.7 mysql -uroot -p

重置 root 用户密码并刷新权限

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

在这里插入图片描述

结语

以上步骤详细解释了在使用 Docker 容器化 MySQL 过程中可能遇到的问题,并提供了解决方法。正确遵循这些步骤可以成功搭建 MySQL 容器,并解决连接和权限相关的常见问题。

http://www.lryc.cn/news/242423.html

相关文章:

  • 利用Nginx与php处理方式不同绕过Nginx_host实现SQL注入
  • 分割list 批量插入数据指定条数数据
  • Arduino库之 LedControl 库说明文档
  • Hadoop学习总结(MapReduce的数据去重)
  • ctfshow sql
  • Java实现求最大值
  • NX二次开发UF_CURVE_ask_curve_inflections 函数介绍
  • 一个基于RedisTemplate静态工具类
  • 【计算机网络笔记】数据链路层——差错编码
  • js生成pdf并自动上传
  • 高品质MP3音频解码语音芯片WT2003Hx的特征优势与应用场景
  • 浅析linux中的信号
  • 从0开始学习JavaScript--JavaScript数据类型与数据结构
  • 数据结构与算法编程题20
  • FreeRTOS源码阅读笔记5--mutex
  • STM32_7(ADC)
  • Flink实战(11)-Exactly-Once语义之两阶段提交
  • 日志技术logback
  • linux(1)之build构建系统基础(一)
  • 25 Linux I2C 驱动
  • API 设计:使用 Node.js 和 Express.js 的综合教程
  • vite和webpack的区别和练习
  • Python与设计模式--装饰器模式
  • flutter之graphic图表自定义tooltip
  • 逆向扒cocosjs安卓包教程-破解加密的js源码
  • Kafka(一)
  • 【Amazon】安装卸载AWS CLI操作流程(Windows 、Linux系统)
  • Django同时连接多种数据库
  • 【链表之练习题】
  • 情感对话机器人的任务体系