docker 挂载的 mysql.cnf 配置修改 sql_mode重启后不生效
1. 运行环境
lnmp
1). 当前使用的 Laravel 版本?
laravel9
//: <> (使用 php artisan --version
命令查看)
2). 当前使用的 php/php-fpm 版本?
PHP 版本:8.1
php-fpm 版本:8.1
3). 当前系统
centos 7.9
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )
4). 业务环境
5). 相关软件版本
mysql8
//: <> (提供相关软件的版本,如 Nginx 、MySQL、MongoDB 等)
2. 问题描述?
docker 挂载的 mysql.cnf 配置修改 sql_mode重启后不生效
docker-compose.yml 如下
mysql:
image: mysql/mysql-server:${MYSQL_VERSION}
container_name: mysql
ports:
- “${MYSQL_HOST_PORT}:3306”
volumes:
- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
- ${DATA_DIR}/mysql:/var/lib/mysql/:rw
- ${MYSQL_LOG_DIR}:/var/log/mysql/:rw
restart: always
networks:
- default
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_ROOT_HOST: "${MYSQL_ROOT_HOST}"
TZ: "$TZ"
mysql.cnf 配置
[client]
#port = 3307
#default-character-set = utf8mb4
[mysqld]
#user = mysql
#port = 3307
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#default-storage-engine = InnoDB
#default-authentication-plugin = mysql_native_password
#character-set-server = utf8mb4
#collation-server = utf8mb4_unicode_ci
#init_connect = ‘SET NAMES utf8mb4’
#disable-log-bin
#skip-character-set-client-handshake
#explicit_defaults_for_timestamp
#slow_query_log
#long_query_time = 3
#slow-query-log-file = /var/log/mysql/mysql.slow.log
#log-error = /var/log/mysql/mysql.error.log
#default-time-zone = ‘+8:00’
[mysql]
#default-character-set = utf8mb4
laravel 框架中数据库的配置文件 config/database.php 有个 mysql.strict 修改为 false
配置文件 中 修改sql_mode
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 然后重启
由于mysql的配置 修改后 是只会影响 新创建的数据库的 已有数据库 需要执行 上面这个命令 才能够修改成功 重启数据库后 将旧数据库也一并修改 SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
以后 创建的数据库 和现在的数据库就都不会再有问题 要不然 临时解决 新数据库也会有这个问题