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

MySQL的Docker版本,部署在ubantu系统

前言

MySQL的Docker版本,部署在ubantu系统,出现问题:
1.执行一个SQL,只有错误编码,没有错误提示信息,主要影响排查SQL运行问题;
2.这个问题,并不影响实际的MySQL运行,如果数据库已经很多数据,就不要再乱动了。
如下图:错误演示
正常应该是:
正常演示

尝试解决

参考别人的博客,mysql执行语句后只有错误代码,没有错误信息
经过排查可能是两个方向:

  1. .cnf 配置错误
  2. MySQL的日志映射到宿主机错误。

经过参考博客,最终没有解决该问题,同时我的数据库数据不多,准备重新部署MySQL5.7.

MySQL5.7,docker版本部署

整理了一下部署流程,挂载MySQL的数据、日志、配置文件,同时处理容器内时间同步问题等。由于时间问题,并没有在生产环境长期运行,故慎重!!!

1. 拉取镜像

sudo docker pull mysql:5.7

2. 宿主机挂载目录准备

sudo mkdir -p /data/mysql/logs
sudo chmod -R 777 /data/mysql/logs
sudo mkdir -p /data/mysql/data
sudo mkdir -p /data/mysql/conf

3.配置文件

cd /data/mysql/conf
sudo touch my.cnf
[mysqld]
user=mysql 
character-set-server=utf8mb4  # 与启动参数统一 
collation-server=utf8mb4_general_ci 
default_authentication_plugin=mysql_native_password 
default-time_zone = '+8:00'  # 强制服务端时区
log_timestamps = SYSTEM     # 确保日志时间戳同步 
log-error = /var/log/mysql/error.log   # 强制指定路径 
slow_query_log = 1  # 启用慢查询日志
slow_query_log_file = /var/log/mysql/slow.log 
general_log = 0  # 按需开启[client]
default-character-set=utf8mb4 [mysql]
default-character-set=utf8mb4

4.启动命令

docker run -d \--restart=always \--name=mysql_5.7 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123456 \-p 3306:3306 \-v /data/mysql/data:/var/lib/mysql \-v /data/mysql/conf:/etc/mysql/conf.d \-v /data/mysql/logs:/var/log/mysql \-v /etc/localtime:/etc/localtime:ro \-v /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai:ro \mysql:5.7 \--character-set-server=utf8mb4 \--collation-server=utf8mb4_general_ci
  • -e TZ=Asia/Shanghai 设置容器时区为上海,确保日志时间与本地一致。
  • -e MYSQL_ROOT_PASSWORD=123456 定义 MySQL 的 root 用户密码
  • -p 3306:3306 将容器内的 3306 端口映射到宿主机的 3306 端口,允许外部通过 宿主机IP:3306 访问 MySQL
  • -v /data/mysql/data:/var/lib/mysql 挂载 MySQL 数据目录,避免容器删除后数据丢失。
  • -v /data/mysql/conf:/etc/mysql/conf.d 映射自定义配置文件目录(可放置 my.cnf 覆盖默认配置)。
  • -v /data/mysql/logs:/var/log/mysql 持久化 MySQL 日志,便于故障排查。
  • -v /etc/localtime:/etc/localtime:ro -v /usr/share/zoneinfo/Asia/Shanghai:/usr/share/zoneinfo/Asia/Shanghai:ro 双重保障容器时区与宿主机同步(某些镜像可能依赖不同时区文件)。
  • --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设置默认字符集为 utf8mb4(支持 Emoji 和四字节字符),排序规则为通用格式。

运行完成以后检查数据、日志是否挂载到宿主机

  • /data/mysql/logs/下
    应该存在 error.log 和 slow.log 日志
  • /data/mysql/data/下
    应该存在MySQL的数据库文件
  • /data/mysql/conf/
    应该存在my.cnf
    宿主机上MySQL挂载的数据/日志/配置等

其他验证步骤

1.检查挂在映射

docker inspect mysql_5.7 | grep -A 10 "Mounts"

确认Destination为/var/log/mysql
在这里插入图片描述

2.容器内日志生成记录

docker exec mysql_5.7 touch /var/log/mysql/test.log 
ls -l /data/mysql/log  # 查看宿主机是否生成test.log 

在这里插入图片描述

3.实时日志追踪

docker exec mysql_5.7 tail -f /var/log/mysql/error.log 

4.配置文件加载验证

docker exec mysql_5.7 mysql --verbose --help | grep "cnf"

在这里插入图片描述

PS:
如果你看到这里,希望我的分享,可以帮到你,感谢你的阅读,愿我们在代码世界变得更强!

相关文章:

  • 七、深入 Hive DDL:管理表、分区与洞察元数据
  • 自我奖励语言模型:突破人类反馈瓶颈
  • 智源联合南开大学开源Chinese-LiPS中文多模态语音识别数据集
  • 【datawhale组队学习】coze-ai-assistant TASK01
  • 电脑关机再开机会换IP吗?深入解析分配机制
  • 【HTML5】【AJAX的几种封装方法详解】
  • 【git】clone项目后续,github clone的网络配置,大型项目git log 输出txt,切换commit学习,goland远程,自存档
  • 逆强化学习IRL在医疗行为模式研究中的应用
  • 安卓工控一体机在智慧农业设备中的应用场景
  • Rimworld Mod教程 武器Weapon篇 近战章 第二讲:生物可用的近战来源
  • SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)
  • (C语言)超市管理系统(测试版)(指针)(数据结构)(二进制文件读写)
  • 网络安全侦察与漏洞扫描One-Liners
  • 【UAP】《Empirical Upper Bound in Object Detection and More》
  • Docker 环境安装(2025最新版)
  • 20、map和set、unordered_map、un_ordered_set的复现
  • 论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity
  • 保险销售系统对接保险公司接口的常见技术架构
  • 快速幂算法详解
  • 免费 OCR 识别 + 批量处理!PDF 工具 提升办公效率
  • 足球少年郎7月试锋芒,明日之星冠军杯构建顶级青少年赛事
  • 广东省中医院脾胃病科大科主任张北平病逝,年仅52岁
  • 夜读|尊重生命的棱角
  • 市场监管总局等五部门约谈外卖平台企业
  • 大外交|中美联合声明拉升全球股市,专家:中美相向而行为世界提供确定性
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表