docker mysql模式sql-mode不生效

场景:

使用docker 搭建lnmp环境,mysql构建如下

yaml 复制代码
services:
  db:
    image: mysql:5.7
    container_name: mysql-5.7
    #表示支持外部访问
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
        - ./data/db_data:/var/lib/mysql
        - ./config/custom-my.cnf:/etc/mysql/conf.d/custom-my.cnf

    #映射到宿主机的端口,测试使用,测试完毕,请注释
    ports:
        - 13306:3306
        
    env_file:
      - .env

    networks:
        - lnmp
    environment:
        MYSQL_ROOT_HOST: "%"
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

custom-my.cnf内容如下:

mysqld

sql_mode = NO_ENGINE_SUBSTITUTION

但是将项目跑起来后,使用SQL语句:SHOW VARIABLES LIKE 'sql_mode'; 结果为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

并没有生效

原因:

MySQL 对配置文件权限有严格要求。如果配置文件权限过高(如 777),MySQL 可能会出于安全考虑忽略该文件

解决过程:

首先验证:

  1. 进入容器
powershell 复制代码
docker exec -it mysql-5.7 bash
  1. 检查文件加载顺序,看custom-my.cnf是否在加载文件列表里
powershell 复制代码
mysqld --help --verbose | grep -A 1 "Default options"

可以看到警告:全局可写配置文件"/etc/mysql/conf.d/custom-my.cnf"被忽略

powershell 复制代码
ls -l /etc/mysql/conf.d/custom-my.cnf

修改文件权限:

powershell 复制代码
chmod 644 ./config/custom-my.cnf

或者直接在构建文件增加命令,命令优先级最高

相关推荐
这个DBA有点耶8 小时前
从MySQL 5.7到8.0:JSON查询性能差在哪?虚拟列索引vs多值索引怎么选
数据库·mysql·架构
leeyi10 小时前
把软件装进不能上网的机房——一套建好了、还没上过战场的交付工程(第101篇)
docker·aigc·agent
YIAN13 小时前
Docker + Nginx 核心原理扫盲:从环境隔离到反向代理,运维面试必考点
后端·docker·面试
IT大白鼠15 小时前
Docker 实战 ELKF 日志监控:容器日志全栈收集分析方案
运维·docker·容器
九皇叔叔1 天前
《MySQL 体系架构详解:Server 层、SQL 执行流程与 InnoDB、MyISAM、MEMORY 存储引擎》
sql·mysql·架构
愤怒的苹果ext1 天前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh
小张同学a.1 天前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
NJCloud1 天前
Docker 容器技术入门:部署、核心概念与基础命令
运维·docker·容器
2601_962072331 天前
docker自建rustdesk-server远程桌面
运维·docker·容器
超兔一体云1 天前
MySQL索引优化实战——从慢查询到索引调优
后端·mysql