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:

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

相关推荐
遇见火星6 小时前
Docker Compose 完全入门:一键启动所有容器
运维·docker·容器·docker compose
火山上的企鹅7 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
阿狸猿7 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩7 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮7 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@8 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能8 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng8 小时前
Redis初识
数据库·redis·缓存
cmes_love9 小时前
股票逐笔level2历史行情下载十档订单薄五档tick分钟下载分享
数据库·区块链
仙俊红9 小时前
SQL 调优需要掌握的知识
数据库·sql