Google Website Translator Gadget

Sunday, April 3, 2011

Siri 4 : Pasang MySQL pada Ubuntu untuk Grails

Pada artikel yang lepas saya memberi sedikit penerangan bagaimana Grails berkomunikasi dengan pangkalan data. Kali ini saya akan memberi contoh bagaimana untuk gunakan pangkalan data MySQL untuk aplikasi Grails. MySQL merupakan pangkalan data yang popular bagi aplikasi web.

Dalam artikel ini, saya akan beri penerangan ringkas mengenai:
  1. Pemasangan MySQL versi 5 pada Ubuntu versi 10.04
  2. Mendaftarkan akaun pengguna pada MySQL
  3. Konfigurasi pada Grails untuk gunakan pangkalan data MySQL 
Dalam artikel ini saya banyak menggunakan Terminal untuk konfigurasi bagi MySQL. Ini penting kerana pada kebiasaanya pada server Linux untuk database tidak perlu ada paparan Desktop, juga bagi mengetahui arahan SQL bagi mentadbir pangkalan data, perlu tahu mentadbir pangkalan data melalui kod, dan berhubung dengan server pangkalan data secara remote menggunakan SSH dari komputer yang berlainan
  1. Buka Terminal pada Ubuntu melalui panel Accessories > Terminal

  2. Mulakan pemasangan MySQL dengan menaip pada Terminal
    sudo apt-get install mysql-server

  3. Mulakan satu sesi MySQL dengan menaip pada Terminal
    mysql -u root -p
    Pada ketika ini perlu wujudkan satu katalaluan password yang baru. Berikan satu katalaluan yang unik. Selepas itu penggesa command prompt akan bertukar kepada 'mysql>'

  4. Uji sesi MySQL berkenaan bagi menyenaraikan database yang sedia ada dengan menaip pada Terminal
    SHOW DATABASES;
    Perhatikan pada penghujung setiap arahan MySQL perlu ada semi-kolon ';'.

  5. Wujudkan tiga database yang baru bagi aplikasi DemoBuku dengan menaip pada Terminal
    CREATE DATABASE demobukudev;
    CREATE DATABASE demobukutest;

    CREATE DATABASE demobuku;
  6. Sekarang daftarkan satu akaun pengguna yang baru pada pangkalan data dengan menaip pada Terminal
    GRANT ALL ON demobukudev.* TO pengguna_buku@localhost IDENTIFIED BY 'katalaluan_2011';
    GRANT ALL ON demobukutest.* TO pengguna_buku@localhost IDENTIFIED BY 'katalaluan_2011';

    GRANT ALL ON demobuku.* TO pengguna_buku@localhost IDENTIFIED BY 'katalaluan_2011';
  7. Hentikan sesi MySQL dengan menaip pada Terminal
    QUIT;
  8. Semak bahawa akaun pengguna MySQL yang baru boleh memulakan sesi dengan menaip pada terminal
    mysql -u pengguna_buku -p

  9. Semak akaun pengguna MySQL yang baru boleh capai kepada database bagi DemoBuku dengan menaip pada Terminal
    SHOW DATABASES;

  10. Buka database demobukudev dengan menaip pada Terminal
     USE demobukudev;

  11. Senaraikan tables yang terdapat pada database demobuku dengan menaip pada Terminal
     SHOW TABLES;
    Perhatikan database demobukudev tidak mempunyai sebarang table
  12. Hentikan sesi MySQL dengan menaip pada Terminal
    QUIT;


  13. Pasang perisian MySQL Connector/JDBC supaya Grails dapat berhubung dengan MySQL dengan menaip pada Terminal
    sudo apt-get install libmysql-java

  14. Salin perisian berkenaan ke projek DemoBuku dengan menaip pada Terminal
    cp /usr/share/java/mysql-connector-java-5.1.10.jar /home/iskandar/NetbeansProjects/DemoBuku/lib/
    Perhatikan saya gunakan MySQL connector versi 5.1.10 dan folder bagi projek saya adalah /home/iskandar/NetbeansProjects/DemoBuku/lib/, ini berlainan bagi anda.

  15. Sekarang saya buka projek Grails saya dalam Netbeans pada Ubuntu melalui panel Programming > Netbeans

  16. Buka fail konfigurasi Data Source bagi projek DemoBuku pada Netbeans melalui tab Projects > DemoBuku > Configuration > DataSource.groovy

  17. Pinda perenggan pertama bagi Data Source untuk MySQL pada fail Data.Source.groovy dengan menaip
    dataSource {
          //ris 20100403 pinda dari hsqldb ke mysql
          pooled = true
          //driverClassName = "org.hsqldb.jdbcDriver"
          //username = "sa"
          //password = ""
          driverClassName = "com.mysql.jdbc.Driver"
          username = "pengguna_buku"
          password = "katalaluan_2011"
    }

  18. Pinda pada perenggan environment supaya menggunakan pangkalan data MySQL dengan menaip
    environments {
          //ris 20110403 pinda hsqldb ke mysql
          development {
               dataSource {
                    //ris 20110327 pinda create-drop ke update
                    //dbCreate = "create-drop" // one of 'create', 'create-drop','update'
                    dbCreate = "update"
                    //ris 20110327 pinda mem ke file
                    //url = "jdbc:hsqldb:mem:devDB"
                    //url = "jdbc:hsqldb:file:devDB"
                    url = "jdbc:mysql://localhost/demobukudev"
               }
          }
          test {
               dataSource {
                    dbCreate = "update"
                    //url = "jdbc:hsqldb:mem:testDb"
                    url = "jdbc:mysql://localhost/demobukutest"
               }
          }
          production {
               dataSource {
                    dbCreate = "update"
                    //url = "jdbc:hsqldb:file:prodDb;shutdown=true"
                    url = "jdbc:mysql://localhost/demobuku"
               }
          }
    }

  19. Simpan pindaan yang dibuat pada Netbeans melalui menu File > Save All .

  20. Bina semula pindaan yang dibuat pada Netbeans melalui menu Run > Build Main Project .



  21. Mulakan projek DemoBuku pada Netbeans melalui menu Run > Run Main Project . Setelah 1 minit, pelayar web browser akan memaparkan muka utama DemoBuku pada http://localhost:8080/DemoBuku/

  22. Pada muka utama DemoBuku berkenaan, klik pada controller demobuku.BukuController, dan senarai rekod Buku List akan dipaparkan. Perhatikan senarai ini kosong walaupun pada sesi sebelum ini saya telah menyimpan rekod buku.

  23. Klik pada ikon New Buku untuk tambah rekod baru. Setelah maklumat rekod baru Buku diisi, klik pada butang Create untuk simpan rekod berkenaan.

  24. Klik pada ikon Buku List untuk paparkan senarai rekod Buku List. Senarai ini termasuk rekod baru yang telah disimpan.



  25. Buka Terminal pada Ubuntu melalui panel Accessories > Terminal

  26. Mulakan sesi MySQL dengan menaip pada terminal
     mysql -u pengguna_buku -p

  27. Senaraikan database bagi pengguna MySQL dengan menaip pada Terminal
     SHOW DATABASES;

  28. Buka database demobukudev dengan menaip pada Terminal
     USE demobukudev;

  29. Senaraikan tables yang terdapat pada database demobuku dengan menaip pada Terminal
     SHOW TABLES;
    Perhatikan database demobukudev sekarang sudah mempunyai table buku.

  30. Hentikan sesi MySQL dengan menaip pada Terminal
    QUIT;


Dalam artikel ini saya gunakan akaun pengguna 'pengguna_buku' pada MySQL. Ini sebagai satu langkah keselamatan, kerana saya dapat mengawal apa yang boleh dilaksanakan oleh akaun ini. Akaun pengguna 'root' boleh lakukan apa sahaja pada pangkalan data MySQL dan tidak boleh dikawal. Ini memberi implikasi dari segi keselamatan pangkalan data.

Sekiranya server bagi aplikasi Grails anda berbeza daripada server bagi pangkalan data MySQL, anda perlukan gunakan IP bagi server Grails untuk mendaftarkan akaun pengguna berkenaan, sebagai contoh:
GRANT ALL ON demobuku.* TO pengguna_buku@12.34.56.78 IDENTIFIED BY 'katalaluan_2011';

Kemudian konfigurasi pada server-server berkenaan supaya dapat berhubung melalui port 3306.

Juga gunakan akaun pengguna MySQL dan schema yang berbeza bagi jenis penggunaan yang berbeza, contohnya bagi pengunjung awam, pengguna biasa, operator, dan pentadbir. Rujuk pada panduan keselamatan MySQL pada http://dev.mysql.com/doc/mysql-security-excerpt/5.0/en/pr01.html

Sebagai pembangun sistem, perlu bijak dan matang dalam memilih konfigurasi sesuai dengan tujuan dan keperluan.

Berikut adalah senarai rujukan yang saya telah buat bagi artikel ini. Sekiranya terdapat sebarang masalah atau anda ingin membuat perubahan, sila lihat pada rujukan berkenaan.


Rujukan :
  1. http://www.mysql.com/
  2. http://www.cyberciti.biz/faq/install-mysql-server-5-on-ubuntu-linux/
  3. http://dev.mysql.com/doc/mysql-security-excerpt/5.0/en/pr01.html
  4. http://marksman.wordpress.com/2009/03/01/setting-up-mysqljdbc-driver-on-ubuntu/
  5. http://blogs.sun.com/arungupta/entry/totd_31_crud_application_using
  6. http://weblogs.java.net/blog/caroljmcdonald/archive/2008/07/sample_store_ca_2.html 
  7. http://ubuntuforums.org/showthread.php?t=943887
  8. http://stackoverflow.com/questions/4987805/grails-cant-find-mysql-connector-class

No comments: