当前位置:  开发笔记 > 编程语言 > 正文

Mysql无法启动 - ibdata1腐败? - 操作系统错误号13 - 权限问题

如何解决《Mysql无法启动-ibdata1腐败?-操作系统错误号13-权限问题》经验,为你挑选了7个好方法。

服务器因电源故障而关机.
Mysql现在不会启动.
磁盘未满.系统日志如下

Oct 11 15:03:31 joe mysqld_safe[24757]: started
Oct 11 15:03:31 joe mysqld[24760]: 101011 15:03:31  InnoDB: Operating system error number 13 in a file operation.
Oct 11 15:03:31 joe mysqld[24760]: InnoDB: The error means mysqld does not have the access rights to
Oct 11 15:03:31 joe mysqld[24760]: InnoDB: the directory.
Oct 11 15:03:31 joe mysqld[24760]: InnoDB: File name ./ibdata1
Oct 11 15:03:31 joe mysqld[24760]: InnoDB: File operation call: 'create'.
Oct 11 15:03:31 joe mysqld[24760]: InnoDB: Cannot continue operation.

小智.. 94

如果您使用的是ubuntu或apparmor,则应在apparmor中允许此更改.

使用新的编辑/etc/apparmor.d/usr.sbin.mysqld和更改./var/lib/mysqlDATADIR

它应该工作.



1> 小智..:

如果您使用的是ubuntu或apparmor,则应在apparmor中允许此更改.

使用新的编辑/etc/apparmor.d/usr.sbin.mysqld和更改./var/lib/mysqlDATADIR

它应该工作.



2> 小智..:

错误:

101130 14:42:51 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
101130 18:07:58 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
101130 18:07:58  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.

解决方案SeLinux SeLinux安全性:

[root@localhost ~]# service mysqld restart
Deteniendo mysqld:                                         [  OK  ]
Iniciando mysqld:                                          [  FALLÓ  ]
[root@localhost ~]#  restorecon -R /var/lib/mysql/
[root@localhost ~]# service mysqld restart
Deteniendo mysqld:                                         [  OK  ]
Iniciando mysqld:                                          [  OK  ]
[root@localhost ~]#



3> Morgan Tocke..:

该文件没有损坏.您可以使用'perror'找出这些错误的来源.即

toaster:~ morgo$ perror 13
OS error code  13:  Permission denied

InnoDB有腐败检测(页面校验和),很高兴地告诉你这是不是问题.

目录权限已更改,或者您的my.cnf文件已被清除,并且它正在尝试在其他位置重新创建数据文件.


它可能是一个不正确的用户/组而不是r/w.从官方的INSTALL-BINARY:shell> chown -R mysql.shell> chgrp -R mysql.shell> scripts/mysql_install_db --user = mysql#删除此步骤.shell> chown -R root.shell> chown -R mysql数据

4> 小智..:

对我来说,恢复安全上下文(selinux)就可以了

restorecon -R /var/lib/mysql/



5> 小智..:

请检查一下:

chown -R mysql:mysql /var/lib/mysql



6> Levite..:

简而言之,(尤其是在RHEL / CentOS / Fedora上)尝试

getenforce

如果它回答Enforcing您,请启动并运行SELinux。暂时停用它,setenforce 0看看MariaDB是否立即启动!相当普遍,尤其是在RHEL / CentOS / Fedora上。

以及本官方文章中还有更多关于此的内容。

一般来说

在UNIX环境中,除了用户访问权限外,还有更多可能阻止文件访问的内容。

诸如SELinux(请参见上文)或AppArmor(如Dan所述)之类的安全模块可能不允许使用它

可以为所需的文件/目录专门设置访问控制列表(ACL)

任何父文件夹都可以由另一个用户拥有,并且没有为其他用户设置x(=“ dir access”)

此外,可能还有其他意外因素,例如...

将mysql datadir设置为mysql没有权限的地方(请参阅参考资料/etc/my.cnf

Mysql可能(奇怪地)以其他用户身份运行,或者该文件可能仅由其他人拥有

只是提一个观点就不在我的脑海了(随意编辑/添加到这个答案顺便说一句)。

在这种情况下,SELinux是“问题”

对于永久解决方案,您可以尝试还原适当的安全性上下文,...

restorecon -R /var/lib/mysql/

...或通过编辑配置文件(通常在中/etc/selinux/config)并按SELINUX=disabled以下文章中的建议进行设置来停用SELinux(但在进行此操作之前请仔细考虑一下)。

这是mariadb.com 的官方帮助页面:如果MariaDB无法启动怎么办

以下是redhat.com的内容:MariaDB更改数据库位置

显然,这些方法同样适用于MySQL。



7> 小智..:

我在CentOS盒子上遇到了完全相同的问题.移动mysql数据目录后,我无法启动服务,即使我已经复制了具有相同所有者和权限的文件.

我遇到了SELinux安全上下文的问题.如果您运行CentOS库存,它很有可能被启用,不会让你想用MySQL做你想做的事情.解决这个问题:

首先比较旧目录和新目录

ls -Z /var/lib/mysql 

ls -Z /new/mysql/dir

如果你看到任何差异,那可能是你的问题.要修改这个:

chcon -R --type=mysql_db_t /new/mysql/dir

-R开关用于递归.如果您只需要更改一个文件,则可以省略它.如果您的上下文与我的不同(可能是不同的发行版),请使用第一个输出所指示的那个(它应该是SELinux内容的第3个字段)

ls -Z /var/lib/mysql 

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有