InnoDB:在 /var/lib/mysql/ 中更改权限或禁用 selinux 后,文件操作中的操作系统错误编号 13 未修复

Posted

技术标签:

【中文标题】InnoDB:在 /var/lib/mysql/ 中更改权限或禁用 selinux 后,文件操作中的操作系统错误编号 13 未修复【英文标题】:InnoDB: Operating system error number 13 in a file operation not fixed after changing permissions in /var/lib/mysql/ or disabling selinux 【发布时间】:2015-02-28 06:14:40 【问题描述】:

当我运行mysql 时,我得到ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 的错误。 mysqld 给出的错误是

    150101 12:08:19 [Warning] Can't create test file /var/lib/mysql/lamp-update.lower-test
    150101 12:08:19 [Warning] Can't create test file /var/lib/mysql/lamp-update.lower-test
    150101 12:08:19 [Warning] One can only use the --user switch if running as root

    150101 12:08:19 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
    150101 12:08:19 [Note] Plugin 'FEDERATED' is disabled.
    mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
    150101 12:08:19 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
    150101 12:08:19 InnoDB: The InnoDB memory heap is disabled
    150101 12:08:19 InnoDB: Mutexes and rw_locks use GCC atomic builtins
    150101 12:08:19 InnoDB: Compressed tables use zlib 1.2.8
    150101 12:08:19 InnoDB: Using Linux native AIO
    150101 12:08:19 InnoDB: Initializing buffer pool, size = 128.0M
    150101 12:08:19 InnoDB: Completed initialization of buffer pool
    150101 12:08:19  InnoDB: Operating system error number 13 in a file operation.
    InnoDB: The error means mysqld does not have the access rights to
    InnoDB: the directory.
    InnoDB: File name ./ibdata1
    InnoDB: File operation call: 'open'.
    InnoDB: Cannot continue operation.

sudo mysqld 给出150101 12:11:59 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead. 的输出

我正在运行一个虚拟 ubuntu linux 服务器。直到昨天,当我收到此错误时,Mysql 一直没有问题。

我尝试将 /var/lib/mysql 中文件的权限设置为 660,将 /var/lib/mysql 中的文件权限设置为 755,并将其子目录设置为 700。然后我运行 sudo chown -R mysql:mysql /var/lib/mysql。然后,我尝试重新启动我的服务器,并运行 mysqld。我遇到了同样的错误。

然后,我尝试通过运行sudo vim /etc/selinux/semanage.conf 并将SELINUX=disabled 作为第一行添加到文件中来禁用selinux。我再次重新启动,并得到同样的错误。

这是我在 stackexchange 或其他网站上看到的任何建议的范围。

有人对我能做什么有任何想法吗?

谢谢,

丹尼尔

编辑:

我通过以 root 身份运行 mysqld “解决了”我的问题,但这似乎不是一个安全明智的好主意,所以我仍在寻找更好的解决方案。

【问题讨论】:

查看这些链接,它可能会有所帮助 ***.com/questions/11657829/… ***.com/questions/19658891/… 你检查apparmor了吗? 请看这个答案***.com/questions/3907666/… 【参考方案1】:

我可以通过将文件夹的所有权从组根更改为 mysql(sudo chown -R mysql:root 文件夹)来解决这个问题。一旦我这样做了,一切又开始工作了。

问候

【讨论】:

这可行,但与 MySQL-Root 用户具有相同的安全风险。这意味着,如果数据库存在漏洞,则测试人员拥有您的服务器。【参考方案2】:

首先,在下面输入这些命令;

chown -R root:mysql /opt/lampp/var/mysql chown -R root:mysql /opt/lampp/mysql chmod -R 777 /opt/lampp/var/mysql chmod -R 777 /opt/lampp/mysql

其次,重新运行安装程序。

它对我有用。

【讨论】:

【参考方案3】:

我也被这个问题困扰。我用'setenforce 0'这个命令,然后mysql服务成功启动。也许你可以试试。祝你好运

【讨论】:

【参考方案4】:

在我的情况下,SELinux 已启用,通过禁用 SELinux,我能够启动服务

要禁用 SELlinux,请编辑

/etc/sysconfig/selinux

设置

SELINUX=disabled

重启并使用命令验证

sestatus

我的文件夹权限是

chown -R mysql:mysql /mnt/efs/fs1/mysql

chmod -R 750 /mnt/efs/fs1/mysql

/mnt/efs/fs1/mysql 是我的数据目录

【讨论】:

是的,我正在从另一台服务器迁移整个备份的数据库文件夹结构,尽管确保一切都归我正确的 mysql 用户和标准文件权限所有,但我无法启动 mySQL设置正确)。终于意识到它是 SELinux 额外的安全层。然后我做了一个完整的 sql 转储,重新启用 SELinux,然后从转储文件“正确”安装

以上是关于InnoDB:在 /var/lib/mysql/ 中更改权限或禁用 selinux 后,文件操作中的操作系统错误编号 13 未修复的主要内容,如果未能解决你的问题,请参考以下文章

innodb_file_per_table - 转换为InnoDB

MySQL 启动时的 InnoDB 错误

MySQL 8.0 InnoDB Cluster 恢复故障成员

MySQL的目录结构 && Innodb的数据存储与MyIsam的存储

MySQL的目录结构 && Innodb的数据存储与MyIsam的存储

MySQL的目录结构 && Innodb的数据存储与MyIsam的存储