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:

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

相关推荐
lzhdim16 分钟前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室1 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
TDengine (老段)1 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
敲个大西瓜1 小时前
Java项目常用数据归档方式
mysql
YOU OU2 小时前
Spring IoC&DI
java·数据库·spring
CodeMartain2 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
Muscleheng3 小时前
Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错
数据库·postgresql
kyriewen3 小时前
面试官让我查各部门工资最高的员工,我用AI三秒写出窗口函数,他愣了
后端·mysql·面试
小码工作室3 小时前
使用 HAVING 进行 MySQL 集合筛选
mysql
罗超驿4 小时前
18.事务的隔离性和隔离级别:MySQL面试高频考点全解析
数据库·mysql·面试