背景
同事一直催升级数据库,
我一开始遇到lower_table_name的参数后就感觉很诡异
想仔细查明原因, 都是有同事一直再催,加上自己在处理申威的服务器
所以在下午同事告诉我 8126和 innodb_strict_mode 的关系后
我以为只是一个参数没生效.
结果第二天发现. 不仅仅是这两个参数没生效, 好多参数没生效
感觉问题还是需要继续检查.
问题核心原因
其实不是数据库版本的问题.
就算使用了 --privileged=true的命令
mysql 也不会读取在 etc/my.cnf 目录下 700 的文件
但是同样的文件在 var/lib/mysql 下 就可以读取.
应该是类似于pam的关系
mysql 不认非root属主,并且没有读取权限的 etc/my.cnf 文件.
所以不仅仅是一个 --privileged的权限问题
还是一个数据库针对 etc/ 下面文件的权限确认的问题.
发现过程
数据库是一个产品的核心, 数据库的参数不对, 整个环境都是白扯.
MySQL的Docker容器的异常提示,严重的误导了我这边的判断.
最开始因为 我挂载的 etc/my.cnf 设置的是 777 权限
启动报错时告诉我不能是world wide 的 config配置文件
我认为次提示肯定是数据库读取到了这个配置文件.
但是事实证明, 我被打脸, 这个提示跟数据库启动加载竟然没关系.
我查询了下之前的脚本, 8.0.26 试是可以加载的
并且找了一些文档也是可使用 -v mysql/my.cnf:/etc/my.cnf
但是最近的版本 突然不行了.
为了验证, 我改用如下脚本进行启动
--defaults-file=/etc/my.cnf
结果发现报错:
2024-05-30 16:25:10+08:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --defaults-file=/etc/my.cnf --verbose --help --log-bin-index=/tmp/tmp.FVfUP9qejn
mysqld: [ERROR] Failed to open required defaults file: etc/my.cnf
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
发现明显开坑了.
将配置文件放到别的路径下 比如 我放到了/mysql3308/mysql 下面, 自己的启动脚本又是:
docker run --privileged=true --name mysql3308 \
-p 3308:3306 -v mysql3308/mysql:/var/lib/mysql \
-v mysql3308/mysql-files:/var/lib/mysql-files \
-v mysql3308/my.cnf:/etc/my.cnf -v mysql3308/log:/var/log \
-e MYSQL_ROOT_PASSWORD=xxxxx -e TZ=Asia/Shanghai -d mysql:8.0.37 --defaults-file=/var/lib/mysql/my.cnf
发现就可以正常启动了.
然后通过如下SQL查看关键的参数:
SHOW VARIABLES WHERE Variable_name IN ('max_connections', 'innodb_strict_mode',\
'lower_case_table_names','transaction_isolation','version','time_zone');
参数结果为:
+------------------------+----------------+
| Variable_name | Value |
+------------------------+----------------+
| innodb_strict_mode | OFF |
| lower_case_table_names | 1 |
| max_connections | 1000 |
| time_zone | +08:00 |
| transaction_isolation | READ-COMMITTED |
| version | 8.0.37 |
+------------------------+----------------+
基本符合预期
不参加--defualts-file 的参数的情况下就是
+------------------------+-----------------+
| Variable_name | Value |
+------------------------+-----------------+
| innodb_strict_mode | ON |
| lower_case_table_names | 0 |
| max_connections | 151 |
| time_zone | SYSTEM |
| transaction_isolation | REPEATABLE-READ |
| version | 8.0.37 |
+------------------------+-----------------+
文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




