Mengubah Default DataDir MySQL di Ubuntu Hardy

Dari awal saya memakai linux, saya selalu memindah datadir mysql di laptop saya ke tempat lain di /home. Tujuannya apa? agar setiap kali upgrade atau install ulang linux, saya tidak perlu repot-repot backup data mysql. Kan repot tuh, apa lagi kalau sampai lupa backup, bisa kacau. Begitu juga dengan setting httpd.conf apache. Tapi ini untuk artikel lain saja. Yang membuat saya menulis artikel ini karena saya tidak tahu kalau ubuntu hardy secara default sudah menyertakan AppArmor. Cara mengubah datadir itu sederhana, coba ikuti langkah2 berikut:

  1. Stop mysql server daemon dengan: sudo /etc/init.d/mysql stop
  2. Buat directory sebagai tujuan datadir yang baru, misal: /home/backup/mysql
  3. Change owner directory tersebut ke mysql:mysql dengan cara: sudo chown mysql:mysql /home/backup/mysql
  4. Copy semua file dan directory dari datadir yang lama (default di /var/lib/mysql/) ke datadir yang baru. Tapi ingat, file ib_arch_log_xxxxxxxxxxx dan ib_logfilexx tidak ikut di-copy.
  5. Setelah itu check file hasil copy adalah milik user mysql. Paling gampang sih chown saja semuanya: sudo chown -R mysql:mysql /home/backup/mysql
  6. Sekarang, ganti informasi datadir di /etc/mysql/my.cnf ke /home/backup/mysql
  7. Kalau sudah yakin benar, start lagi mysql server daemon: sudo /etc/init.d/mysql start
  8. Untuk testing apa benar sekarang sudah pakai datadir yang baru, bisa dengan membuat database baru dan melihat apa database itu ter-create di datadir baru.
  9. Kalau sudah, biarkan dulu selama beberapa hari sampai merasa yakin 100%.
  10. Setelah itu, data di datadir lama bisa dihapus total.

Kalau di system anda ada AppArmor terinstall (mestinya sih ada, kalau belum di utak-atik), maka pada poin 7 akan menghasilkan error seperti berikut:

Initializing MySQL database: Installing all prepared tables
060125 10:41:44 [Warning] Can't create test file /home/backup/mysql/localhost.lower-test
/usr/libexec/mysqld: Can't change dir to '/home/backup/mysql/' (Errcode: 13)
060125 10:41:44 [ERROR] Aborting

Kalau langkah2 diatas sudah benar dan directory pada datadir dan semua isinya sudah menjadi milik user mysql dan memang benar AppArmor terinstall, maka langkah berikutnya adalah mengubah entry profile AppArmor untuk mysqld di /etc/apparmor.d/usr.sbin.mysqld.
Tambahkan entry berikut pada file tersebut:

/home/global/mysql/ r,
/home/global/mysql/** rwk,

Untuk penjelasan lebih lanjut silahkan meluncur ke halaman dokumentasi AppArmor di website Novell

Sekarang, coba start lagi mysql server daemon anda, seharusnya error tersebut sudah hilang.

Author: Arief Bayu Purwanto

Hello, my name is Arief Bayu Purwanto, a 24 years old father of a beautiful daughter. Interested in online programming, linux, games, and reading. Currently working on kapanlagi.com as junior developer. I live in a relatively quite and cool place called Malang. I'm available for some freelance stuff as well as some consulting job. You can see my portofolio for some previous task I've finished and some other information related to my capability. Btw, I'm plurking here.

  • Ternyata bukan saya saja yang sering melakukan hal ini :) Hanya belakangan saya tidak pernah melakukannya lagi, bukannya apa-apa, tetapi karena malas saja memindahkannya.

    silent:Pindah datanya kan sekali aja bos, berikutnya tinggal penyesuaian di my.cnf setiap habis install ulang.

  • Ternyata bukan saya saja yang sering melakukan hal ini :) Hanya belakangan saya tidak pernah melakukannya lagi, bukannya apa-apa, tetapi karena malas saja memindahkannya.

    silent:

    Pindah datanya kan sekali aja bos, berikutnya tinggal penyesuaian di my.cnf setiap habis install ulang.

  • Kalo saya, cara gampangan. Stop mysql, kemudian pindah foldernya ke lokasi baru, kemudian bikin softlink di lokasi lama ke lokasi baru. Selesai.

    silent:Whoa, ternyata ada yang lebih simple ya. Kenapa juga aku gak kepikiran sampe disitu.

  • Kalo saya, cara gampangan. Stop mysql, kemudian pindah foldernya ke lokasi baru, kemudian bikin softlink di lokasi lama ke lokasi baru. Selesai.

    silent:

    Whoa, ternyata ada yang lebih simple ya. Kenapa juga aku gak kepikiran sampe disitu.

  • saya pake ubuntu 9.04, udah ikuti langkah-langkah diatas kok nggak berhasil ya, pada saat di restart mysql nya failed. kalo bikin softlink gimana caranya?
    saya memindahkan ke external disk supaya gampang dibawa kemana mana soalnya saya kerja dirumah dan dikantor.

    • Coba apparmor-nya dimatikan dulu, kalau ternyata setelah apparmor dimatikan MySQL bisa jalan, berarti setting apparmor ada yang salah.
      Kalau tetap gak bisa jalan, coba cek di log-nya mysql di /var/log/mysql.err atau /var/log/mysql.log. Cari aja data2 yang mengindikasikan adanya error.

  • saya pake ubuntu 9.04, udah ikuti langkah-langkah diatas kok nggak berhasil ya, pada saat di restart mysql nya failed. kalo bikin softlink gimana caranya?
    saya memindahkan ke external disk supaya gampang dibawa kemana mana soalnya saya kerja dirumah dan dikantor.

    • Coba apparmor-nya dimatikan dulu, kalau ternyata setelah apparmor dimatikan MySQL bisa jalan, berarti setting apparmor ada yang salah.
      Kalau tetap gak bisa jalan, coba cek di log-nya mysql di /var/log/mysql.err atau /var/log/mysql.log. Cari aja data2 yang mengindikasikan adanya error.