这两天又被mysql8.0大小写的问题坑到了,看下面的报错:
chown: cannot access './proc/38/fd/6': No such file or directory
chown: cannot access './proc/38/fd/7': No such file or directory
chown: cannot access './proc/38/fdinfo/4': No such file or directory
chown: cannot access './proc/38/fdinfo/5': No such file or directory
chown: cannot access './proc/38/fdinfo/6': No such file or directory
chown: cannot access './proc/38/fdinfo/7': No such file or directory
chown: changing ownership of './sys/fs/bpf': Operation not permitted
chown: changing ownership of './sys/fs/pstore': Operation not permitted
chown: changing ownership of './sys/kernel/debug': Operation not permitted
chown: changing ownership of './sys/kernel/config': Operation not permitted
chown: changing ownership of './sys/kernel/security': Operation not permitted
由于我使用的是容器,在docker logs mysql的时候就不断刷出这些信息,使用
docker logs mysql |tee -a mysql.log
将命令重定向到本地文件,打开日志文件查看只有这些信息
2024-01-03 09:46:07+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:47:08+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:48:09+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:49:09+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:50:10+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:51:11+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:52:12+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:53:13+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:54:14+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:55:15+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:56:16+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 09:57:16+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2024-01-03 10:00:49+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started
问一位大佬他说可能是容器的docker-entrypoint.sh
文件有问题,于是
docker cp mysql:/usr/bin/docker-entrypoint.sh
将这个文件拷到本地
看到打印的日志只打印到Entrypoint script for MySQL Server 8.0.30-1.el8 started
,所以认为从这开始有问题,于是继续使用mysql_note
打印剩下的脚本部分
自行添加了以下3行打印
发现他能打印前面2行
到第三行不能打印,说明这个函数有问题了,又继续查看这个函数问题
大佬怀疑是id -u
这个命令有问题导致容器不能执行,退出了,于是又打印id -u
发出也没有问题,后面我干脆直接不怀疑这个问题了,因为mysql8.0.28容器能启动,我把镜像换成8.0.35的时候就不能启动了,说明应该不是这个脚本的问题,再说我也把这2个容器的这个脚本拿下来对比了内容一样。后来有别的事,这个事暂时不研究了。
以上说的是昨天我想从mysql8.0.28升级到8.0.35出现的问题以及排查过程。今天我干脆换回8.0.28他也出现了这样的问题,有点奇葩。我怀疑可能是my.cnf文件出问题了,我干脆用默认的my.cnf文件启动,果然没有问题,那么问题就出现在my.cnf文件。大佬又说用二分法分别一次注释掉一半的配置内容。经过好久的不断注释和重启的过程终于发现了还是lower_case_table_names
这个参数的问题。之前就被他坑过一次,mysql自从8版本以后默认这个值为0也就是区别大小写,但是我们需要设置为1不区分大小写。那么昨天为什么换回mysql8.0.28的时候他就能启动呢?应该是原来我就是设置为1,换成8.0.35的时候他有可能要重新验证一次,在读取这个配置的时候和他默认的字典的值0不一样他就报错了。而且 他报错的chown: changing ownership of './sys/kernel/debug': Operation not permitted
是因为这儿还有一个坑,初始安装的时候这个my.cnf文件如果权限不为644,那么你修改这个lower_case_table_names
值的时候他会检查权限,如果你的权限不为644他就不能修改,换句话说他日志会给你提示报错
2023-12-28T14:25:48.780677+08:00 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dict
ionary ('0')
但是问题是我之前遇到过所以我的my.cnf的权限早就改成644了,那为何他从8.0.28升到8.0.35的时候他又会提示权限问题这个我至今不懂。
无论你是想将值从0改为1或者从1改为0他都会有这个报错,尤其是你已经安装过,你再想修改这个值很大可能性会报错,这时候你只能将数据库导出来,重新安装,再导入数据。
结论是:mysql8的my.cnf权限你最好在安装前就设置为644,并且lower_case_table_names
这个值你在安装前就要设置好,安装后你再想设置就会报错了。