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

前言

MySQL的Docker版本,部署在ubantu系统,出现问题:

1.执行一个SQL,只有错误编码,没有错误提示信息,主要影响排查SQL运行问题;

2.这个问题,并不影响实际的MySQL运行,如果数据库已经很多数据,就不要再乱动了。

如下图:

正常应该是:

尝试解决

参考别人的博客,mysql执行语句后只有错误代码,没有错误信息

经过排查可能是两个方向:

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

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

MySQL5.7,docker版本部署

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

1. 拉取镜像

bash 复制代码
sudo docker pull mysql:5.7

2. 宿主机挂载目录准备

bash 复制代码
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.配置文件

bash 复制代码
cd /data/mysql/conf
sudo touch my.cnf
bash 复制代码
[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.启动命令

bash 复制代码
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

其他验证步骤

1.检查挂在映射

bash 复制代码
docker inspect mysql_5.7 | grep -A 10 "Mounts"

确认Destination为/var/log/mysql

2.容器内日志生成记录

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

3.实时日志追踪

bash 复制代码
docker exec mysql_5.7 tail -f /var/log/mysql/error.log 

4.配置文件加载验证

bash 复制代码
docker exec mysql_5.7 mysql --verbose --help | grep "cnf"

PS:

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

相关推荐
吠品7 分钟前
MySQL LEFT() 函数:精准截取字段前N位,掌握字符串处理核心
数据库·oracle
.生产的驴8 分钟前
1Panel实战|SpringColud微服务部署生产环境一键部署Docker+Nacos+MySQL 数据定时备份 控制台 安全高效易维护
服务器·后端·mysql·spring cloud·docker·微服务·信息可视化
Meepo_haha8 分钟前
【JOIN】关键字在MySql中的详细使用
数据库·mysql
-Da-31 分钟前
【操作系统学习日记】并发编程中的竞态条件与同步机制:互斥锁与信号量
java·服务器·javascript·数据库·系统架构
Predestination王瀞潞33 分钟前
Base Tools-Associate-Fifth:re库详解
数据库·mysql
Ricky_Theseus1 小时前
SQL Server2008 select语句基本语法
数据库·sql
Exquisite.1 小时前
Docker容器技术
docker·容器·eureka
ai产品老杨1 小时前
异构计算时代的架构突围:基于 Docker 的 AI 视频平台如何实现 X86/ARM 与 GPU/NPU 全兼容(源码交付)
人工智能·docker·架构
网络工程小王1 小时前
【Python数据分析基础】
大数据·数据库·人工智能·学习
Riemann~~2 小时前
dockerfile解析
docker·dockerfile