ฉันจะย้ายไฟล์ข้อมูล MySQL ไปยังพาร์ติชั่นต่าง ๆ ได้อย่างไร?


27

ฉันมีฮาร์ดไดรฟ์ของฉันถูกแบ่งพาร์ติชันด้วยสองพาร์ติชันดังนั้นฉันสามารถติดตั้ง Ubuntu ใหม่ได้อย่างง่ายดายและลองใช้เวอร์ชันที่แตกต่างกันโดยไม่สูญเสียข้อมูลไดเรกทอรีบ้านของฉัน มันตั้งค่าเช่นนี้:

20GB  -> /     (root)
180GB -> /home 

ฉันทำมากของการทำงานการพัฒนาเพื่อให้ฉันมีของฉัน/var/wwwsymlinking /home/valorin/workspaceโฟลเดอร์

แต่ฉันต้องการทำเช่นนี้กับไฟล์ข้อมูล MySQL ของฉันเช่นกันเนื่องจากฉันรู้สึกรำคาญว่าทุกครั้งที่ฉันติดตั้งเครื่องใหม่ฉันต้องใช้ SQLdump เต็มรูปแบบจากนั้นเรียกคืนฐานข้อมูลทั้งหมดก่อนที่ฉันจะทำงานได้มากขึ้น

วิธีที่ดีที่สุดในการทำเช่นนี้โดยไม่ทำลาย MySQL คืออะไร?

คำตอบ:


30

ที่จริงแล้วมีคำตอบเฉพาะสำหรับ Ubuntu สำหรับคำถามนี้

ดังกล่าวโดย Gergoes เชื่อมโยงนี้เป็นพื้นเกี่ยวกับการปรับเปลี่ยน/etc/mysql/my.cnfและตั้งค่าใหม่สำหรับ= datadirใน[mysqld]ส่วน จนถึงส่วนที่ไม่เจาะจงของคำตอบ

สมมติว่าคุณกำลังใช้งาน Ubuntu รุ่นที่ค่อนข้างทันสมัยคุณอาจติดตั้งAppArmor เป็นค่าเริ่มต้นด้วยโปรไฟล์สำหรับ/ usr / sbin / mysqldในโหมดบังคับใช้ โปรไฟล์เริ่มต้นนั้นมักจะไม่ยอมรับ datadir ใหม่ของคุณ

ให้เราสมมติว่า datadir ใหม่ของคุณจะ/ home / ข้อมูล / MySQL

หากคุณเปิดไฟล์/etc/apparmor.d/usr.sbin.mysqldคุณจะพบกฎสองบรรทัดนี้

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

สมมติว่าตัวอย่างของเราข้างต้นพวกเขาจะต้องถูกแทนที่หรือ (อาจจะดีกว่า) ครบครันด้วยสองบรรทัดนี้

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

ก่อนที่เราจะสามารถเริ่มต้นเซิร์ฟเวอร์ MySQL ด้วย datadir ใหม่เราจะต้องโหลดโปรไฟล์ apparmor ใหม่ของเราด้วย

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

ดูเหมือนว่าจะใช้งานไม่ได้กับ Natty (11.4) ฉันต้องเริ่ม MySQL โดยใช้ / usr / sbin / mysqld เพื่อให้มันอ่านข้อมูลที่เปลี่ยนแปลงของฉัน มิฉะนั้นจะอ่านข้อมูลเก่าของฉันต่อไป นี่อาจเป็นข้อผิดพลาดในด้านของฉัน
สามถ้วย

ข้างต้นล้มเหลวในการแก้ปัญหาสำหรับฉันใน Ubuntu 12.04 (แม่นยำ) ฉันพบว่าจำเป็นต้องแก้ไขไฟล์ / etc / apparmor.d/tunables/alias เพื่อรวมบรรทัด "alias / var / lib / mysql / -> / home / data / mysql /" ด้วยสิ่งนี้ในสถานที่ฉัน ไม่ต้องการการเปลี่ยนแปลงใด ๆ ในไฟล์ AppArmor อื่น ๆ มันทำงานได้ทันทีหลังจากรีสตาร์ท AppArmor ด้วย "/etc/init.d/apparmor restart" และ MySQL ด้วย "restart mysql"
mak

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

4

ผู้ใช้ขั้นสูงมีขั้นตอนที่ดีทีละขั้นตอนเกี่ยวกับวิธีแก้ปัญหานี้

นี่คือชุดคำสั่งอื่น ๆ เกี่ยวกับการทำสิ่งเดียวกัน http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

นี่คือมันโพสต์ใหม่ ขึ้นและลงคะแนนต้นฉบับถ้าคุณทำได้กับผู้ใช้ super

หลังจากความสับสนทั่วไปเกี่ยวกับการอนุญาตฉันรู้ว่าปัญหาไม่ใช่ว่าฉันไม่มีสิทธิ์และเส้นทางที่ถูกต้อง แต่ 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

เพิ่มบรรทัด:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

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

$ sudo vim /etc/mysql/my.cnf 

เปลี่ยนสาย:

datadir=/var/lib/mysql

ไปที่:

datadir=/my-new-db-dir/

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

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

$ sudo /etc/init.d/apparmor restart

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

$ sudo start mysql

หวังว่านี่จะช่วยได้!


0

นี่ไม่ใช่อูบุนตูจริงๆ อย่างไรก็ตามนี่คือสิ่งที่อาจช่วยได้: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location


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

เว็บไซต์ใช้งานไม่ได้
Hengjie


-1

มันจะไม่ทำงานอย่างนั้น

ผู้ใช้ mysql ต้องมีสิทธิ์เขียนถึง dir ใหม่:

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