服务器因电源故障而关机.
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/mysql
DATADIR
它应该工作.
如果您使用的是ubuntu或apparmor,则应在apparmor中允许此更改.
使用新的编辑/etc/apparmor.d/usr.sbin.mysqld
和更改./var/lib/mysql
DATADIR
它应该工作.
错误:
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 ~]#
该文件没有损坏.您可以使用'perror'找出这些错误的来源.即
toaster:~ morgo$ perror 13 OS error code 13: Permission denied
InnoDB有腐败检测(页面校验和),很高兴地告诉你这是不是问题.
目录权限已更改,或者您的my.cnf文件已被清除,并且它正在尝试在其他位置重新创建数据文件.
对我来说,恢复安全上下文(selinux)就可以了
restorecon -R /var/lib/mysql/
请检查一下:
chown -R mysql:mysql /var/lib/mysql
getenforce
如果它回答Enforcing
您,请启动并运行SELinux。暂时停用它,setenforce 0
看看MariaDB是否立即启动!相当普遍,尤其是在RHEL / CentOS / Fedora上。
以及本官方文章中还有更多关于此的内容。
在UNIX环境中,除了用户访问权限外,还有更多可能阻止文件访问的内容。
诸如SELinux(请参见上文)或AppArmor(如Dan所述)之类的安全模块可能不允许使用它
可以为所需的文件/目录专门设置访问控制列表(ACL)
任何父文件夹都可以由另一个用户拥有,并且没有为其他用户设置x(=“ dir access”)
此外,可能还有其他意外因素,例如...
将mysql datadir
设置为mysql没有权限的地方(请参阅参考资料/etc/my.cnf
)
Mysql可能(奇怪地)以其他用户身份运行,或者该文件可能仅由其他人拥有
只是提一个观点就不在我的脑海了(随意编辑/添加到这个答案顺便说一句)。
对于永久解决方案,您可以尝试还原适当的安全性上下文,...
restorecon -R /var/lib/mysql/
...或通过编辑配置文件(通常在中/etc/selinux/config
)并按SELINUX=disabled
以下文章中的建议进行设置来停用SELinux(但在进行此操作之前请仔细考虑一下)。
这是mariadb.com 的官方帮助页面:如果MariaDB无法启动怎么办
以下是redhat.com的内容:MariaDB更改数据库位置
显然,这些方法同样适用于MySQL。
我在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