การเปลี่ยนไดเรกทอรีข้อมูล MySQL ใน Ubuntu Server 10.04


9

ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อพยายามเปลี่ยนไดเรกทอรีข้อมูลในเซิร์ฟเวอร์ ubuntu 10.04

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  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: 'create'.
InnoDB: Cannot continue operation.

2
... และคำถามของคุณคืออะไร? โปรดทราบว่าหากคุณย้ายเฉพาะเนื้อหาของโฟลเดอร์และไม่มีไฟล์ใด ๆ คุณจะสูญเสียเนื้อหาตารางของ InnoDB ทั้งหมด
bobince

ไม่มีคำถาม / ช้อน เพิ่งคิดว่านี่อาจเป็นที่สนใจของผู้คนที่นี่ จุดดีเกี่ยวกับเนื้อหาตาราง InnoDB!

2
หากคุณต้องการถามและตอบคำถามของคุณเองว่าใช้ได้ แต่ใช้เวลาซักถามจริงและให้คำตอบเป็นคำตอบ
Zoredache

คำตอบ:


8

หลังจากความสับสนทั่วไปเกี่ยวกับการอนุญาต OP เข้าใจว่าปัญหาไม่ใช่ว่าเขาไม่มีสิทธิ์และสิทธิ์ของพา ธ แต่ AppArmor ป้องกัน MySQL ไม่ให้อ่านและเขียนไปยังตำแหน่งใหม่

นี่คือทางออกของเขา:

ก่อนอื่นหยุด MySQL ดังนั้นไม่มีอะไรแปลกเกิดขึ้นในขณะที่คุณเล่นซอ:

$ sudo stop mysql

จากนั้นย้ายไดเร็กทอรีฐานข้อมูลทั้งหมดไปที่โฮมใหม่:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

อย่าย้ายไฟล์พวกเขาจะถูกสร้างโดย mysql เพียงแค่ย้ายโฟลเดอร์ (ซึ่งเป็นฐานข้อมูล)

จากนั้นขอให้ AppArmor อนุญาตให้ mysql ใช้โฟลเดอร์ใหม่อย่างสุภาพ:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

จากนั้นบอก mysql ว่า datadir ย้ายแล้ว:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

หมายเหตุ: ขึ้นอยู่กับการตั้งค่าฐานข้อมูลของคุณคุณอาจต้องเปลี่ยน Innodb-data-home-dir เป็นต้นเช่นกัน

จากนั้นรีสตาร์ท AppArmor เพื่ออ่านการตั้งค่าใหม่:

$ sudo /etc/init.d/apparmor restart

และเริ่ม MySQL อีกครั้งโดยใช้ datadir ใหม่:

$ sudo start mysql

2
คุณสามารถรักษาฐานข้อมูลและเรียกใช้งานได้โดยเชื่อมโยงไฟล์ไปยังตำแหน่งใหม่แทนที่จะย้ายไฟล์เหล่านั้น ... เว้นแต่จะมีที่เก็บข้อมูลสองชุดอยู่ในพาร์ติชันแยกต่างหาก
cpbills

คำแนะนำในการย้ายเฉพาะไดเรกทอรีนั้นไม่ถูกต้องในกรณีที่คุณใช้งาน Innodb ในกรณีนี้คุณจะต้องย้ายข้อมูล innodb และไฟล์บันทึกเช่นกัน (ibdata *, ib_logfile *)
hillel

หมายเหตุสำหรับผู้อื่นที่ไม่ประมาทเหมือนฉัน คุณต้องมีเครื่องหมายทับต่อท้ายในพา ธ ในการกำหนดค่า AppArmor /new-mysql-dir/ rมิฉะนั้นจะยังคงถูกปฏิเสธ สิ่งพื้นฐานของ Linux แต่ฉันไม่สามารถทำให้เครื่องหมายถูกต่อท้ายถูกต้องได้
Jeff

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