จะเอา /var/lib/mysql บน Ubuntu ไปไว้ที่อื่นทำอย่างไร
mrgill | November 9, 2009 | 780 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.
ก็คงจบแต่เพียงเท่านี้


3 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
ทำได้แล้วครับ ขอบคุณที่มาตอบนะคับ ^^
Leave a Comment
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.