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 ของฉันได้ไหม

ขอบคุณมาก.

คำตอบ:


15

เหตุผลนี้เป็นเพราะคุณเชื่อม/tmpโยงไปยังสถานที่อื่น, /home/tmp. แต่ MySQL เป็นเกราะโดย AppArmor /home/tmpซึ่งไม่อนุญาตให้มีการเขียนได้อย่างอิสระเพื่อ เพื่อแก้ไขสถานการณ์คุณสามารถแก้ไข/etc/apparmor.d/abstractions/user-tmpและเพิ่มได้/home/tmpอย่างเหมาะสม สำหรับฉันบรรทัดพิเศษ

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

ทำเคล็ดลับ


1
ที่สมบูรณ์แบบ! แก้ไขปัญหาได้ทันที ฉันแน่ใจว่ามีบางอย่างเกี่ยวข้องกับ symlink!
YonoRan

1
ฉันต้องรีสตาร์ทเครื่องตรวจจับเพื่อให้การเปลี่ยนแปลงมีผล:sudo /etc/init.d/apparmor restart
Nadjib Mami

6

ดูเหมือนว่าคุณไม่มีสิทธิ์ที่เหมาะสม/tmpซึ่งควรจะเป็นโลกที่เขียนได้ คุณควรจะสามารถแก้ไขได้ด้วยคำสั่งนี้:

sudo chmod 1777 /tmp

ที่จะตั้งค่าการอนุญาตเป็น777(rwx สำหรับทุกคน) และตั้งบิตที่แนะนำสำหรับ/tmpdir ตามที่อธิบายไว้ในman chmod:

ธงลบที่ถูก จำกัด หรือ BIT เหนียว

การตั้งค่าสถานะการลบที่ จำกัด หรือบิตที่ จำกัด เป็นบิตเดียวซึ่งการตีความขึ้นอยู่กับชนิดของไฟล์ สำหรับไดเรกทอรีจะป้องกันผู้ใช้ที่ไม่มีสิทธิพิเศษจากการลบหรือเปลี่ยนชื่อไฟล์ในไดเรกทอรีเว้นแต่พวกเขาเป็นเจ้าของไฟล์หรือไดเรกทอรี สิ่งนี้เรียกว่าการตั้งค่าสถานะการลบแบบ จำกัด สำหรับไดเรกทอรีและพบได้ทั่วไปในไดเรกทอรีที่เขียนได้ทั่วโลกเช่น / tmp สำหรับไฟล์ปกติในระบบเก่าบางรุ่นบิตจะบันทึกภาพข้อความของโปรแกรมบนอุปกรณ์ swap เพื่อให้โหลดได้เร็วขึ้นเมื่อทำงาน นี่เรียกว่าบิตเหนียว


@ScottSeverance โปรดอย่าเปลี่ยนรหัสเป็นเครื่องหมายคำพูดเพียงเพื่อประโยชน์ของการเปลี่ยนแปลง ใช่ฉันรู้ว่าฉันกำลังอ้างถึง แต่การบล็อกโค้ดให้การจัดรูปแบบที่ดีขึ้นและเคารพส่วนหัวและเยื้อง วิธีที่คุณแก้ไขทุกอย่างอยู่ในบรรทัดเดียวกัน
terdon

1
ฉันเปลี่ยนมันเพราะเมื่อมันจัดรูปแบบเป็นรหัสฉันไม่สามารถอ่านมันบนโทรศัพท์ของฉันโดยไม่มีการเลื่อนแนวนอนคงที่ ไม่มีประโยชน์ที่จะจัดรูปแบบการเสนอราคาเป็นรหัสจริงๆ หากคุณไม่ชอบหัวเรื่องที่อยู่ในบรรทัดเดียวกันมีวิธีการแก้ไขที่ไม่ทำลายจอแสดงผลของผู้ใช้บนโทรศัพท์
Scott Severance

@ScottSeverance อายุติธรรมพอฉันไม่ได้ตระหนักว่ามันทำให้เกิดปัญหากับโทรศัพท์ ตกลงฉันจะใส่มันในบล็อกคำพูดแล้ว ฉันเพิ่งรำคาญเพราะการแก้ไขของคุณ (โดยไม่มีคำอธิบาย) ดูแย่กว่าเบราว์เซอร์ปกติและคุณไม่ได้ตรวจสอบว่ามันแสดงผลถูกต้อง และคุณเพิ่งแก้ไขอีกครั้งและมันก็สมบูรณ์แบบขอบคุณ!
terdon

1
ฉันเป็นทางออกที่ถูกต้อง Mysql ได้รับการบรรจุและผู้ตรวจการไม่ชอบที่/tmpจะถูกย้ายไปที่อื่นโดยไม่ต้องเปลี่ยน confs การตรวจสอบบอกว่าไม่ใช่เรื่องของการอนุญาตที่ถูกปฏิเสธในระบบไฟล์ แต่เป็นผู้ตรวจสอบ
Antti Haapala
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.