You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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才能启动?


原因分析

这种情况主要和以下两个因素有关:

  1. systemd服务的权限隔离机制
    RHEL 8的systemd默认对服务进程有严格的文件系统访问限制,当/var/lib/mysql目录的组属主为mysql时,可能触发了systemd的某个安全校验规则,导致MariaDB进程无法在该目录下绑定Unix套接字。将组属主改为root后,进程的目录访问权限符合systemd的预期限制,从而可以正常创建套接字。

  2. MariaDB补丁引入的权限校验逻辑
    本次补丁更新可能调整了Unix套接字创建阶段的权限校验逻辑,要求套接字所在目录的组属主为root,以此强化安全规范——尽管最终生成的mysql.sock属主是mysql:mysql,但创建过程依赖目录具备特定的组权限属性,避免非授权用户通过组权限访问套接字。

此外,由于SELinux处于宽容模式且syslog中无avc:denied日志,可以排除SELinux对该问题的影响,核心原因聚焦于文件系统权限的直接校验。


内容的提问来源于stack exchange,提问作者Michel Antonesco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 12:13:12