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:

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

相关推荐
hnlucky1 分钟前
《基于 Kubernetes 的 WordPress 高可用部署实践:从 MariaDB 到 Nginx 反向代理》
运维·数据库·nginx·云原生·容器·kubernetes·mariadb
dgiij6 分钟前
excel大表导入数据库
数据库·mysql·node.js·excel
多敲代码防脱发10 分钟前
导出导入Excel文件(详解-基于EasyExcel)
java·开发语言·jvm·数据库·mysql·excel
风筝超冷21 分钟前
获取高德地图JS API的安全密钥和Key的方法
服务器·mysql·js api
数据库幼崽34 分钟前
MySQL 8.0 OCP 1Z0-908 51-60题
数据库·mysql·ocp
didiplus36 分钟前
MySQL 8.0 OCP(1Z0-908)英文题库(31-40)
mysql·adb·ocp·数据库管理员·mysql认证
didiplus40 分钟前
MySQL 8.0 OCP(1Z0-908)英文题库(21-30)
mysql·dba·认证考试·题库
数据库幼崽41 分钟前
MySQL 8.0 OCP 1Z0-908 21-30题
mysql·ocp
wjcurry1 小时前
我的实习日报
java·redis·mysql