RHEL8.9下MariaDB10.5.23需将/var/lib/mysql组属主设为root的原因
问题:RHEL 8.9上MariaDB 10.5.23补丁更新后需修改/var/lib/mysql组属主为root才能启动
环境与现象
- 系统:RHEL 8.9
- MariaDB版本:10.5.23
- 现象:补丁更新并重启系统后,必须执行命令
chown -R mysql:root /var/lib/mysql才能正常启动MariaDB;否则启动失败,报错日志如下:
May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [Note] InnoDB: 10.5.23 started; log sequence number 114858617868828; transaction id 6884951201 May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [Note] InnoDB: Loading buffer pool(s) from /data/mysql/ib_buffer_pool May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [Note] Plugin 'FEEDBACK' is disabled. May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [Note] Server socket created on IP: '0.0.0.0'. May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [ERROR] Can't start server : Bind on unix socket: Permission denied May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [ERROR] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ? May 21 00:43:07 sprcellapp mariadbd[104253]: 2024-05-21 0:43:07 0 [ERROR] Aborting May 21 00:43:08 sprcellapp systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE May 21 00:43:08 sprcellapp systemd[1]: mariadb.service: Failed with result 'exit-code'. May 21 00:43:08 sprcellapp systemd[1]: Failed to start MariaDB 10.5.23 database server.
权限对比
- 启动失败时的/var/lib/mysql目录权限:
drwxr-xr-x. 5 mysql mysql 231 May 21 00:51 /var/lib/mysql/ - 修改后可正常启动的目录及文件权限:
drwxr-xr-x. 5 mysql root 231 May 21 00:51 . drwxr-xr-x. 64 root root 4096 Feb 3 16:51 .. -rw-rw----. 1 mysql root 24576 Feb 4 11:17 aria_log.00000001 -rw-rw----. 1 mysql root 52 Feb 4 11:17 aria_log_control -rw-rw----. 1 mysql root 976 Feb 4 11:17 ib_buffer_pool -rw-rw----. 1 mysql root 12582912 Feb 4 11:17 ibdata1 -rw-rw----. 1 mysql root 100663296 Feb 4 11:17 ib_logfile0 -rw-rw----. 1 mysql root 0 Jan 31 14:51 multi-master.info drwx------. 2 mysql root 4096 Jan 31 14:25 mysql srwxrwxrwx. 1 mysql mysql 0 May 21 00:51 mysql.sock -rw-r--r--. 1 mysql root 15 Jan 31 14:25 mysql_upgrade_info drwx------. 2 mysql root 20 Jan 31 14:25 performance_schema drwx------. 2 mysql root 20 Jan 31 14:25 test
注意:MariaDB启动后自动创建的mysql.sock文件属主为mysql:mysql
核心疑问
为何/var/lib/mysql目录的组属主必须设为root才能启动?
原因分析
这种情况主要和以下两个因素有关:
systemd服务的权限隔离机制
RHEL 8的systemd默认对服务进程有严格的文件系统访问限制,当/var/lib/mysql目录的组属主为mysql时,可能触发了systemd的某个安全校验规则,导致MariaDB进程无法在该目录下绑定Unix套接字。将组属主改为root后,进程的目录访问权限符合systemd的预期限制,从而可以正常创建套接字。MariaDB补丁引入的权限校验逻辑
本次补丁更新可能调整了Unix套接字创建阶段的权限校验逻辑,要求套接字所在目录的组属主为root,以此强化安全规范——尽管最终生成的mysql.sock属主是mysql:mysql,但创建过程依赖目录具备特定的组权限属性,避免非授权用户通过组权限访问套接字。
此外,由于SELinux处于宽容模式且syslog中无avc:denied日志,可以排除SELinux对该问题的影响,核心原因聚焦于文件系统权限的直接校验。
内容的提问来源于stack exchange,提问作者Michel Antonesco
相关产品推荐
相关产品推荐

