“ ไม่พบไฟล์ mysql / plugin.frm” เมื่อเริ่มต้น MySQL


17

เมื่อฉันเริ่มเซิร์ฟเวอร์ MySQL ฉันได้รับข้อผิดพลาดนี้:

/usr/libexec/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

ฉันได้รันmysql_upgradeเพื่อสร้างใหม่และทำงานเพื่อสร้างใหม่ ก่อนที่ฉันจะทำอย่างนั้นฉันก็ลบและติดตั้ง MySQL อย่างไรก็ตามเมื่อฉันพยายามเริ่มใหม่ฉันได้รับข้อผิดพลาดเดียวกัน ฉันแน่ใจว่าไม่ใช่ปัญหาสิทธิ์เนื่องจากไฟล์และไดเรกทอรีทั้งหมดถูกสร้างขึ้นโดยmysqlผู้ใช้

คุณช่วยแนะนำฉันเกี่ยวกับวิธีการแก้ไขข้อผิดพลาดนี้ได้อย่างไร


selinux ยังสามารถทำให้เกิดปัญหานี้ได้
Ross

คำตอบ:


16

หากคุณมีไดเรกทอรีข้อมูล mysql ในตำแหน่งที่ไม่ได้มาตรฐานและระบบของคุณมี apparmor ตรวจสอบให้แน่ใจว่า/etc/apparmor.d/usr.sbin.mysqldมีไดเรกทอรีข้อมูลของคุณอยู่ในรายการที่ปลอดภัย การกำหนดค่าควรมีลักษณะดังนี้:

/mysql/data/dir/ r, #trailing slash is mandatory
/mysql/data/dir/** rwk,

Apparmor daemon จะต้องเริ่มต้นใหม่หลังจากที่คุณทำการเปลี่ยนแปลงใด ๆ ในการกำหนดค่า


1
apparmorกลับมาปลุกเราเป็นครั้งคราวดังนั้นเราจึงไม่ลืมเขา ...
แหวนØ

1
ว้าว! มีเวลามากในการหาคำตอบนี้ ขอบคุณ!
Diego AndrésDíaz Espinoza

ในกรณีของฉันฉันยังใช้ dir /etc/apparmor.d/abstractions/user-tmpอุณหภูมิที่กำหนดเองและผมพบว่าผมจำเป็นที่จะเลียนแบบจากเส้นบาง เมื่อฉันใส่owner /mysql-tmp/** rwkl, /mysql-tmp/ r,เข้าไป/etc/apparmor.d/local/usr.sbin.mysqldมันเริ่มทำงานสำหรับฉันบน Ubuntu 14.04
amacleod

12

คุณแน่ใจหรือว่าไม่เกี่ยวกับการอนุญาต errno: 13 :

$ perror 13
OS error code  13:  Permission denied

สิ่งแรกที่ต้องลองคือเปลี่ยนความเป็นเจ้าของดาต้าดอร์ของMySQLตัวอย่างเช่นถ้าคุณรันMySQLด้วยmysql ของผู้ใช้:

chown -R mysql:mysql /path/to/datadir

สิ่งที่จะต้องตรวจสอบอีกประการหนึ่งคือถ้าmysqldเจ้าของกระบวนการ (ส่วนใหญ่อาจMySQL ) มีสิทธิ์ที่จำเป็นสำหรับปลายทางที่กำหนดไว้เป็นtmpdir และถ้าด้วยเหตุผลใด ๆ ข้างต้นใช้งานไม่ได้ให้ลองติดตามกระบวนการmysqldเพื่อดูว่าทำไมมันถึงได้รับอนุญาต :

strace -fp$(/sbin/pidof mysqld) -o /tmp/my_trace.log

ฉันพบปัญหาเดียวกันเมื่ออัพเกรดจาก MySQL 5.1 เป็น 5.7 ปรากฏว่าผู้ใช้mysqlสูญเสียความเป็นเจ้าของไดเรกทอรี/ var / lib / mysql
Rob

1

ฉันเห็นด้วยกับ Dimitre ปัญหานี้เกิดขึ้นส่วนใหญ่เนื่องจากการอนุญาตไม่เพียงพอ เปลี่ยนความเป็นเจ้าของโฟลเดอร์ MySql root เป็น mysql

chown -R mysql:mysql [mysql root folder]

คุณอาจต้องการเปลี่ยนสิทธิ์ของสคริปต์ Mysql เป็นผู้ใช้ที่คุณกำหนดเอง

chown my_mysql:my_mysql [mysqld etc]

สิ่งนี้ใช้ได้สำหรับฉัน


1

ในกรณีของฉันฉันต้องวางไดเรกทอรีข้อมูล MySQL รวมถึงibdata1โฟลเดอร์ลงในการแบ่งพาร์ติชันอื่นเพราะฉันibdata1เติบโตเร็วเกินไปและปัญหาหน่วยความจำเกิดขึ้น เพื่อที่ฉันจะต้องเปลี่ยนไฟล์ my.cnf เช่นด้านล่าง

my.cnf เดิมคือ:

datadir         =  /var/lib/mysql

my.cnf ตอนนี้:

datadir         = /home/ubuntu/data/mysql

ฉันเหนื่อย,

sudo chown -R mysql:mysql  /home/ubuntu/data/mysql

แต่ยังคงมีข้อผิดพลาดข้างต้นเหมือนกัน จากนั้นฉันก็ลองเปลี่ยน/etc/apparmor.d/usr.sbin.mysqldไฟล์ มันทำงานได้ดีสำหรับฉัน

usr.sbin.mysqldเราควรอนุญาตพิเศษโฟลเดอร์ใหม่ของเราใน

 # /var/lib/mysql/ r,
 #/var/lib/mysql/** rwk,

แทนที่จะเพิ่มบรรทัดข้างต้น

 /home/ubuntu/data/mysql/ r,
 /home/ubuntu/data/mysql/** rwk,

จากนั้นรีสตาร์ทเซิร์ฟเวอร์ MySQL


1

หากคุณใช้งาน SELinux สิ่งต่อไปนี้อาจช่วยได้เช่นกัน ...

 $ -> ls -lZa
 $ -> chcon -R -v -u system_u -t mysqld_db_t /var/lib/mysql
 $ -> ls -lZa

สำหรับฉันแล้วการrestorecon -R /var/lib/mysqlช่วยคืนค่าการตั้งค่า SELinux ให้ถูกต้องสำหรับไดเรกทอรี
Sebi

0

ฉันมีปัญหานี้หลังจากอัปเกรดจาก 5.5 เป็น 5.6

น่าแปลกที่ดูเหมือนว่าmysqlผู้ใช้ถูกลบและสร้างขึ้นใหม่ซึ่งทำให้ไฟล์ mysql ทั้งหมดต้อง 'เสีย' สิทธิ์ของพวกเขา ...

ฉันพบสิ่งนี้โดยไปที่ mysql dir (ซึ่งในกรณีของฉันไม่ใช่ dir เริ่มต้นตามที่ฉันย้ายมัน) และเห็นว่าเจ้าของเป็นเพียงหมายเลข uuid และ guid ... ดังนั้นฉันจึงวิ่งchown mysql:mysqlต่อไป dirs และไฟล์และ voila


-1

ง่าย ๆ นี้chownใช้ได้กับฉันด้วยไม่มีขั้นตอนการขัดข้องอีกต่อไป:

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

โชคดีที่การเล่นกับ apparmor นั้นซับซ้อนและยากที่จะแก้ไข

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.