前言
MySQL的Docker版本,部署在ubantu系统,出现问题:
1.执行一个SQL,只有错误编码,没有错误提示信息,主要影响排查SQL运行问题;
2.这个问题,并不影响实际的MySQL运行,如果数据库已经很多数据,就不要再乱动了。
如下图:
正常应该是:
尝试解决
参考别人的博客,mysql执行语句后只有错误代码,没有错误信息
经过排查可能是两个方向:
.cnf
配置错误- 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
其他验证步骤
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:
如果你看到这里,希望我的分享,可以帮到你,感谢你的阅读,愿我们在代码世界变得更强!