MySQL无法写入/ tmp,然后无法重新启动


11

我正在运行orthomcl使用的程序mysql。该程序之前在同一台计算机上运行良好。这次我收到一条错误消息。

DBD::mysql::st execute failed: Can't create/write to file '/tmp/#sql_700_1.MYI' (Errcode: 13) at /usr/local/bioinf/orthomclSoftware-v2.0.9/bin/orthomclPairs line 709, <F> line 14.

我试图重新启动mysql服务器,服务器关闭但无法启动。

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log并且/var/log/mysql.err是空的。我试了几件事情,我发现这里包括清洗和重新安装mysql-server和删除ib_logfile*/var/lib/mysql

我尝试的另一件事是

sudo dpkg-reconfigure mysql-server-5.5

错误消息是:

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibNzqwO0' (Errcode: 13)
InnoDB: Error: unable to create temporary file; errno: 13
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

以下是一些信息dmesg | grep mysql

[3115187.338273] init: mysql main process (44255) terminated with status 1
[3115187.338417] init: mysql main process ended, respawning
[3115187.356361] init: mysql post-start process (44256) terminated with status 1
[3116827.473256] type=1400 audit(1396394069.224:132): apparmor="DENIED" operation="open" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/" pid=45396 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[3116827.582489] type=1400 audit(1396394069.332:133): apparmor="DENIED" operation="mknod" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/#sql_b154_0.MYI" pid=45402 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
[3116827.908448] type=1400 audit(1396394069.660:134): apparmor="DENIED" operation="mknod" parent=45317 profile="/usr/sbin/mysqld" name="/home/tmp/ibbPfaqP" pid=45415 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=118 ouid=118
[3116841.623608] type=1400 audit(1396394083.372:139): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=45443 comm="apparmor_parser"
[3116841.771621] init: mysql pre-start process (45474) terminated with status 1

有很多这样的行。

有人可以帮我弄清楚我的MySQL服务器怎么了吗?

非常感谢。

Answers:


15

这样做的原因是您/tmp已链接到另一个位置/home/tmp。但是MySQL受AppArmor约束,后者不允许随意编写/home/tmp。为了解决这种情况,您可以编辑/etc/apparmor.d/abstractions/user-tmp并在/home/tmp其中适当添加;对我来说多余的线

  owner /home/tmp/**    rwkl,
  /home/tmp/            rw,

做到了。


1
完善!立即解决此问题。我确定这与符号链接有关!
YonoRan

1
我必须重新启动apparmor才能使更改生效:sudo /etc/init.d/apparmor restart
Nadjib Mami,

6

听起来您没有对的正确权限/tmp,这应该是世界可写的。您应该可以使用以下命令对其进行修复:

sudo chmod 1777 /tmp

这会将权限设置为777(每个人都为rwx),并设置推荐用于/tmp目录的粘滞位。如中所述man chmod

限位标记或粘滞位

受限删除标志或粘性位是单个位,其解释取决于文件类型。对于目录,除非特权用户拥有文件或目录,否则它可以防止特权用户删除或重命名目录中的文件。这称为目录的受限删除标志,通常在世界可写目录(例如/ tmp)中找到。对于某些较旧系统上的常规文件,该位将程序的文本图像保存在交换设备上,因此在运行时将更快地加载;这就是所谓的粘性位。


@ScottSeverance请不要仅仅为了更改而将代码更改为引号。是的,我知道我在引用,但是代码块提供了更好的格式并尊重了标头和缩进。您进行编辑的方式完全相同。
terdon 2014年

1
我进行了更改,因为当将其格式化为代码时,如果不进行恒定的水平滚动操作,就无法在手机上读取它。将引号格式化为代码确实没有任何好处。如果您不希望标题位于同一行,则可以使用一些方法来解决此问题,而又不会破坏手机上用户的显示。
Scott Severance 2014年

@ScottSeverance啊,很公平,我还没有意识到它在电话上引起了问题。好的,我将其放在引号中。我很生气,因为您的编辑(没有说明)在普通浏览器上看起来更糟,并且您没有检查它能否正确呈现。您刚刚又进行了编辑,非常完美,谢谢!
terdon

1
排雷是正确的解决方案。Mysql已/tmp被预装,并且预装不喜欢在不更改conf的情况下将其移动到另一个位置。审计表明,这不是文件系统上拒绝权限的问题,而是由保镖保护。
Antti Haapala 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.