จะเอา /var/lib/mysql บน Ubuntu ไปไว้ที่อื่นทำอย่างไร

mrgill   | November 9, 2009   |   1,071 Views

ต้องการเอา /var/lib/mysql ไปไว้ที่อื่นครับเพราะกลัวเวลาเครื่องมีปัญหาอาจทำให้ข้อมูลหายได้เพราะ /var/lib/mysql อยู่ใน / เลย(ไม่ได้แบ่ง partition แยกออกมา) วิธีแรกที่ผมทำเลยคือ

root@ubuntu:~# mv /var/lib/mysql /data/mysql root@ubuntu:~# ln -s /data/mysql /var/lib/mysql

ก็คือ move จาก /var/lib/mysql ไปไว้ที่ /data/mysql ผลคือตอน restart mysql มันจะฟ้องว่า

root@ubuntu:~# /etc/init.d/mysql restart * Stopping MySQL database server mysqld [ OK ] * Starting MySQL database server mysqld [fail]

ไปใน /var/log/syslog ก็เจอ error ประมาณนี้ แล้วจะทำไงดี

root@ubuntu:~# tail -f /var/log/syslog Nov 9 02:36:29 ubuntu kernel: [ 2394.732730] type=1503 audit(1257752189.048:131): operation="open" pid=5484 parent=5483 profile="/usr/sbin/mysqld" requested_mask="r::" denied_mask="r::" fsuid=0 ouid=0 name="/sys/devices/system/cpu/" Nov 9 02:36:30 ubuntu kernel: [ 2395.745479] type=1503 audit(1257752190.061:132): operation="open" pid=5494 parent=5493 profile="/usr/sbin/mysqld" requested_mask="r::" denied_mask="r::" fsuid=0 ouid=0 name="/sys/devices/system/cpu/" Nov 9 02:36:31 ubuntu kernel: [ 2396.761345] type=1503 audit(1257752191.080:133): operation="open" pid=5504 parent=5503 profile="/usr/sbin/mysqld" requested_mask="r::" denied_mask="r::" fsuid=0 ouid=0 name="/sys/devices/system/cpu/" Nov 9 02:36:31 ubuntu kernel: [ 2396.774493] type=1503 audit(1257752191.092:134): operation="open" pid=5513 parent=5512 profile="/usr/sbin/mysqld" requested_mask="r::" denied_mask="r::" fsuid=0 ouid=0 name="/sys/devices/system/cpu/" Nov 9 02:36:31 ubuntu /etc/init.d/mysql[5520]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in Nov 9 02:36:31 ubuntu /etc/init.d/mysql[5520]: #007/usr/bin/mysqladmin: connect to server at 'localhost' failed Nov 9 02:36:31 ubuntu /etc/init.d/mysql[5520]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' Nov 9 02:36:31 ubuntu /etc/init.d/mysql[5520]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!


ผมไปเจอคำตอบที่นี่ครับ
http://forums.mysql.com/read.php?24,211657,225700#msg-225700
เขาบอกว่าให้เข้าไปแก้ไฟล์ /etc/apparmor.d/usr.sbin.mysqld ผมก็จัดไป

root@ubuntu:~# /etc/apparmor.d/usr.sbin.mysqld

โดยเปลี่ยนจาก

# vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include /usr/sbin/mysqld { #include #include #include #include #include capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/my.cnf r, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /var/lib/mysql/ r, /var/lib/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid w, /var/run/mysqld/mysqld.sock w, }

ให้เปลี่ยนเป็น

# vim:syntax=apparmor # Last Modified: Tue Jun 19 17:37:30 2007 #include /usr/sbin/mysqld { #include #include #include #include #include capability dac_override, capability sys_resource, capability setgid, capability setuid, network tcp, /etc/hosts.allow r, /etc/hosts.deny r, /etc/mysql/*.pem r, /etc/mysql/conf.d/ r, /etc/mysql/conf.d/* r, /etc/mysql/my.cnf r, /usr/sbin/mysqld mr, /usr/share/mysql/** r, /var/log/mysql.log rw, /var/log/mysql.err rw, /data/mysql/ r, /data/mysql/** rwk, /var/log/mysql/ r, /var/log/mysql/* rw, /var/run/mysqld/mysqld.pid w, /var/run/mysqld/mysqld.sock w, }

แต่อย่าเพิ่งลบ Symbolic Link นะครับยังจำเป็นต้องใช้
จากนั้นก็สั่ง Restart Apparmor โดย

root@ubuntu:~# /etc/init.d/apparmor restart

จากนั้นลองสั่ง Restart Mysql อีกครั้ง

root@ubuntu:~# /etc/init.d/mysql restart * Stopping MySQL database server mysqld [ OK ] * Starting MySQL database server mysqld [ OK ] * Checking for corrupt, not cleanly closed and upgrade needing tables.

ก็คงจบแต่เพียงเท่านี้

Category : Linux,Server,Ubuntu

Tags: database, How to, Linux, mysql, Server, service, troubleshooting, Ubuntu

Related Posts

จะเข้า Recovery Mode บน Ubuntu 9.10 Karmic Koala ยังไง แก้ปัญหาใช้คำสั่ง sudo ไม่ได้บน ubuntu

4 Comments Leave a Comment

  • 1. best  |  December 15, 2009 at 4:38 PM

    จะย้ายบน redhat ทำไงอ่ะคับมันไม่มี apparmor อ่ะคับช่วยที

  • 2. mrgill  |  December 15, 2009 at 4:55 PM

    ย้ายแล้วมันมี error อะไรแจ้งบ้างครับ
    ลองไปดูในไฟล์ /etc/my.cf ครับรู้สึกมันจะมี directive ที่กำหนด path ของ data เป็น /var/lib/mysql ถ้าลองเปลี่ยนตรงนั้นไม่แน่ใจว่าสามารถช่วยได้หรือเปล่า
    แต่ถ้าจำไม่ผิดที่ผมเคยลอง(เมื่อนานมาแล้ว) move ไปไว้อีกที่แล้วทำ symbolic link มันก็ทำงานได้เลยนะครับ

  • 3. best  |  December 16, 2009 at 4:36 PM

    ทำได้แล้วครับ ขอบคุณที่มาตอบนะคับ ^^

  • 4. dual localhost webserver &hellip  |  September 17, 2010 at 7:57 AM

    [...] Links mrGilL [...]

Leave a Comment

(required)

(required), (Hidden)

 

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

TrackBack URL  |  RSS feed for comments on this post.


Chat

Recent Entries

Random Posts

Social Network

Tag Cloud

Calendar

November 2009
S M T W T F S
« Oct   Dec »
1234567
891011121314
15161718192021
22232425262728
2930  

Twitter: imrgill

RSS LinuxToday

RSS HowToForge

RSS UbuntuClub

RSS Blognone

RSS PowerWindowsBlog

Tag

Categories

Archives

Blogroll

Meta

Get Adobe Flash playerPlugin by wpburn.com wordpress themes