Welcome

Welcome, thanks to look my blog

Monday 21 July 2014

Tutorial Belajar MySQL Part 7: Folder Instalasi MySQL dan File my.ini

Setelah pada Tutorial Belajar MySQL : Download, Install dan Setingan awal MySQL, kita telah menginstall aplikasi MySQL di komputer, padaTutorial Beajar MySQL: Folder Instalasi MySQL dan File my.ini kita akan melihat “isi” dari folder instalasi MySQL. File-file apa saja yang perlu diketahui dari folder “MySQL“.

Jika mengikuti instalasi MySQL sesuai denganTutorial MySQL: Download, Install dan Setingan awal MySQL, maka folder instalasi MySQL akan berada di “D:\MySQL\”. Namun jika anda menginstal MySQL tanpa merubah lokasi instalasi default, biasanya instalasi MySQL akan berada pada “C:\Program Files\MySQL\MySQL Server 5.5\”.
Di dalam folder instalasi MySQL ini, kita akan mendapati beberapa file dan folder:
MySQL Struktur Folder

Folder bin

Pada folder bin akan berisi semua aplikasi MySQL dalam bentuk .exe. Beberapa diantaranya:
  • mysqld : untuk menjalankan MySQL Server
  • mysql : untuk menjalankan MySQL Client
  • mysqldump : untuk export file database
  • mysqladmin : untuk mengkofigurasi MySQL
Beberapa aplikasi di dalam folder bin ini akan kita pelajari dalam tutorial MySQL berikutnya. Untuk menjalankan aplikasi-aplikasi ini sebagian besar akan diakses dari command promt (cmd).
Folder bin MySQL : File-file aplikasi MySQL

Folder data

Dalam folder ini akan berisi seluruh database dan tabel yang kita buat di dalam MySQL. Setiap database nantinya akan tampil sebagai sebuah folder. Untuk saat ini, hanya ada folder mysql dan performance_schema. Jika anda membuka folder mysql, akan didapati beberapa file. File paling atas, columns_priv, adalah nama salah satu tabel dalam database “mysql”. Setiap tabel nantinya akan memiliki setidaknya 3 file, yaitu : .frm, .MYD, dan .MYI (dalam contoh kita : columns_priv.frm, columns_priv.MYD, dan columns_priv.MYI).
Folder data MySQL : 3 file untuk sebuah 'tabel'
Karena setiap folder mewakili sebuah database, kita juga bisa memindahkan sebuah database “mahasiswa” dengan mengopy folder “mahasiswa” dalam folder data ini, lalu mem-pastekannya kedalam folder yang sama dalam instalasi MySQL di komputer lain. Ini adalah cara tercepat untuk copy database tanpa perlu masuk ke aplikasi MySQL. Namun cara ini hanya dapat dilakukan untuk versi MySQL yang sama. Juga seandainya file dalam folder ini ada yang terhapus, database tersebut juga akan ikut terhapus.

Folder include

Folder include berisi beberapa file library pendukung dan settingan fungsi untuk MySQL. Kita dapat melihat-lihat isi dari file ini dengan aplikasi notepad, atau dengan Notepad++. Sebagian besar library ini dibuat dengan bahasa C dan C++.
Folder inculde MySQL : Library dalam bahasa C dan C++

Folder lib

Folder lib juga berisi file-file library MySQL, juga terdapat folder plugin untuk menambahkan fungsi tambahan untuk MySQL.
Folder lib MySQL : plugin untuk MySQL

Folder share

Dalam folder share ini terdapat berbagai folder dengan nama-nama negara. Folder ini berisi file-file untuk mengatur character set dan zona waktu terkait dengan perbedaan negara.
Folder share MySQL : Internationalization, dan Character Set

File my.ini

Selain folder-folder diatas, dalam instalasi MySQL kita juga mendapati file my.ini. File ini adalah file settingan terkait dengan instalasi MySQL, dan file inilah sebagai tempat konfigurasi MySQL. Kita dapat membuka file my.ini dengan notepad, atau dengan file text lainnya, seperti Notepad++.
Folder MySQL : File Konfigurasi utama, my.ini
Isi dari my.ini berkaitan dengan berbagai setingan konfigurasi MySQL seperti folder default, port TCP/IP yang digunakan, default engine database, besar memory yang dialokasikan untuk MySQL, dan berbagai setingan teknis lainnya. Setiap setingan diberikan keterangan, sehingga kita dapat mengetahui maksud dan tujuan setingan tersebut.
File Konfigurasi MySQL : my.ini
Salah satu yang menarik perhatian saya, adalah setingan default engine database, hampir setiap instalasi MySQL menggunakan MYISAM sebagai default engine, namun sejak MySQL 5.5, default engine berubah menjadi InnoDB. Sehingga kita bisa merubah kembali settingan default engine pada file my.ini. Lebih jauh tentang MySQL database engine dan perbedaan antara MYISAM dengan InnoDB, akan kita bahas dalam tutorial berikutnya.
Default Engine pada MySQL 5.5 : InnoDB
Selain file my.ini, terdapat beberapa file lainnya, seperti my-huge.ini, my-innodb-heavy-4G.ini, dan my-small.ini. File ini adalah template untuk setinggan my.ini. Sesuai dengan namanya masing-masing, template ini diperuntukkan untuk server dengan kondisi hardware tertentu. Misalnya kita ingin menggunakan komputer pentium 2, dengan memory 128MB sebagai MySQL server, maka setingan dalam my-medium.ini dapat kita copy-paste kedalam my.ini untuk mencapai performa yang maksimal. Jika kita menggunakan komputer server pentium i7 dengan 8GB memory, setingan my-innodb-heavy-4G. ini akan memberikan performa maksimal untuk server yang sibuk.

Dengan mengetahui isi dari folder instalasi MySQL, saatnya kita jalankan MySQL Server, dalam tutorial selanjutnya, Tutorial Belajar MySQL  : Menjalankan MySQL Server

Instalasi dan Konfigurasi Database MySQL

Umumnya sebuah web server modern tidak hanya menampilkan halaman-halaman statis. Oleh karena itu biasanya diperlukan juga sebuah database untuk menyimpan data-data yang dimasukkan oleh pengguna web kita. Database yang sudah umum digunakan di lingkungan linux adalah MySQL. Meskipun dalam beberapa kasus misalnya untuk portabilitas, kita dapat menggunakan database SQLite3.

Instalasi MySQL

Hampir setiap distribusi linux sudah menyediakan paket database MySQL. Jadi silakan ikuti panduan instalasi database MySQL dari distribusi yang anda gunakan. Saya tampilkan dua tautan instalasi MySQL untuk dua distribusi yang sering digunakan:
Untuk distribusi ArchLinux, silakan konsultasi pada mas go2n. Mampus kowe gon! Huahahahaha devil
Untuk Slackware sendiri, biasanya sudah kita install tanpa sengaja soalnya kebanyakan pengguna Slackware malas untuk memilih satu demi satu paket-paket yang ingin diinstal (ketahuan ya? cheeky). Kalaupun belum ada, kita tinggal menjalankan perintah berikut:
# slackpkg install mysql
Khusus di Slackware, sebelum dapat menjalankan servis MySQL, kita harus menginisialisasi database MySQL terlebih dahulu jika kita belum pernah menginstal/menjalankan servis MySQL di mesin kita:
# mysql_install_db --user=mysql
Setelah itu kita dapat menjalankan servis MySQL. Di Slackware kita dapat menggunakan rc.mysqld untuk itu:
# /bin/sh /etc/rc.d/rc.mysqld start
Untuk melihat apakah servis MySQL sudah berjalan, kita dapat mengeceknya seperti ini:
$ ps -U mysql
$ netstat -n -l -tap tcp | grep 'mysql'

Konfigurasi MySQL

MySQL menggunakan berkas konfigurasi yang mudah sekali dibaca, dipahami dan diubah isinya. Tetapi saran saya lebih kita menggunakan contoh berkas konfigurasi yang telah disediakan oleh MySQL. Berkas-berkas contoh tersebut dapat ditemui di dalam direktori tertentu sesuai dengan hasil instalasi paket MySQL dari distribusi anda. Di dalam paket MySQL 5.5.x milik Slackware, berkas contoh tersebut diletakkan di dalam direktori /etc/mysql.
Ada lima contoh berkas my.cnf yang telah dioptimasi oleh tim pengembang MySQL (bukan oleh pemaket/distributor linux, lho) yang disesuaikan dengan jumlah sumber daya perangkat keras yang digunakan, utamanya jumlah RAM dan model penggunaan sistem. Berikut adalah contoh berkas konfigurasi tersebut:
  1. my-small.cnf: Berkas ini mengandung konfigurasi yang cocok diterapkan pada sistem dengan jumlah RAM kecil (<=64M) dan servis MySQL tidak digunakan secara terus menerus.
  2. my-medium.cnf: Berkas ini dapat digunakan untuk sistem dengan jumlah RAM terbatas (32M - 64M) tetapi membutuhkan servis MySQL. Konfigurasi ini juga dapat digunakan untuk sistem dengan RAM 128M tetapi sistem juga menjalankan servis lain misalnya webserver.
  3. my-large.cnf: Konfigurasi ini digunakan pada mesin dengan RAM 512M dan hanya menjalankan servis utama database MySQL.
  4. my-huge.cnf: Konfigurasi ini dapat digunakan untuk mesin dengan kapasitas RAM 1G - 2G dan hanya menjalankan servis utama database MySQL.
  5. my-innodb-heavy-4G.cnf: Konfigurasi ini digunakan untuk mesin dengan kapasitas RAM 4G atau lebih yang menjalankan servis MySQL dengan tabel InnoDB dan sering menjalankan query yang kompleks.
Jika melihat karakteristik konfigurasi yang ada, saya rasa konfigurasi yang kedua amatlah cocok digunakan di mesin-mesin kecil seperti laptop atau PC desktop yang umumnya hanya digunakan sendiri dan tidak melayani akses database dari luar sistem. Jadi saya memilih untuk menggunakan konfigurasi tersebut untuk digunakan di laptop saya. Cara menggunakan berkas konfigurasi tersebut adalah seperti berikut ini (jangan lupa jadi root dulu):
$ cat /etc/mysql/my-medium.cnf > /etc/mysql/my.cnf
Kemudian edit berkas /etc/mysql/my.cnf jika membutuhkan penyesuaian tertentu. Tetapi hati-hati dalam mengubah nilai-nilai buffer memori yang digunakan. Jika tidak mesin anda bisa langsung mati karena kehabisan RAM. Saran saya alokasikan RAM maksimum 50% untuk MySQL sehingga sistem kita tetap dapat berjalan dengan normal. Silakan baca dokumentasi opsi-opsi konfigurasi yang dapat digunakan ke dalam my.cnf:
Setelah itu anda dapat menjalankan servis MySQL anda, tentunya setelah anda menginisiasi direktori database MySQL seperti yang saya tulis sebelumnya.

Pertimbangan Keamanan

Di sini saya hanya ingin mengingatkan beberapa hal mengenai database MySQL dan mungkin berlaku juga di database lain seperti PostgreSQL atau Oracle.

User Servis MySQL

Hal pertama yang harus kita ketahui dan wajib karena berkaitan dengan keutuhan data dan proses backup atau migrasi adalah setiap servis database berjalan menggunakan hak guna dan hak akses selain root. Biasanya distribusi linux menyediakan user dan grup tersendiri untuk servis database MySQL. Misalnya user bernama mysql atau _mysql atau nobody, dengan kode user di bawah 1000. Kode user di bawah 1000 biasa diartikan user tersebut bukanlah user yang diijinkan untuk login dan mendapatkan shell, tetapi dapat menjalankan servis tertentu secara terisolasi dan sedikit interaksi dengan root.
Jadi pastikan database MySQL dijalankan bukan oleh root dan bukan oleh user yang kita gunakan untuk login. Misalnya user untuk servis MySQL adalah mysql, maka kita harus mengecek apakah direktori database MySQL sudah menjadi milik user mysql sebelum kita menjalankan servis MySQL:
$ ls -lha /var/lib/mysql (atau direktori lain tempat database berada)
Jika belum, kita dapat mengubah kepemilikan direktori tersebut menjadi milik user mysql:
# chown -R mysql:mysql /var/lib/mysql

Koneksi Soket vs TCP

Mungkin sudah banyak yang mengetahui bahwa MySQL mendukung koneksi ke database menggunakan soket dan TCP. Apa itu soket? Soket adalah sebuah berkas virtual yang dibuat khusus untuk menghubungkan koneksi dari luar ke sebuah servis. Karena soket adalah sebuah berkas (file) maka pastilah soket akan menempati sebuah ruang tertentu di dalam filesystem. Keuntungan dan sekaligus kerugian dari sistem soket adalah karena lokasinya yang bersifat lokal di dalam filesystem. Artinya user yang tidak memiliki akses langsung ke dalam filesystem tersebut, tentu tidak akan dapat mengakses soket tersebut. Dengan demikian, koneksi ke MySQL dapat menjadi lebih aman, tetapi database kita menjadi terisolasi dari jaringan. Kita dapat mendefinisikan lokasi soket MySQL di dalam file /etc/mysql/my.cnf:
[mysqld]
socket = /var/run/mysql/mysql.sock
Untuk mengecek apakah soket MySQL sudah terbuka, kita dapat menjalankan perintah berikut:
$ netstat -n -lap | grep 'mysql'
Selain soket, MySQL juga dapat diakses menggunakan koneksi tcp ke port mysql (biasanya 3306). Tetapi harus diperhatikan bahwa membuka port tcp 3306 artinya sama dengan mempublikasikan database kita ke jaringan. Jika sistem kita tidak memiliki firewall dan sistem pengamanan internal MySQL yang memadai, ya wajar jika kemudian databasenya dibobol orang, baik yang kita kenal maupun yang tidak kita kenal. Kita dapat mengubah port default MySQL di berkas /etc/my.cnf:
[mysqld]
port = 3306
Untuk mengecek apakah koneksi tcp MySQL sudah siap, kita lihat dengan:
$ netstat -n -l -tap | grep 'mysql'
Jika kita hanya ingin menggunakan soket dan menutup koneksi tcp, kita dapat menambahkan baris berikut ke berkas /etc/my.cnf, lalu restart servis mysql:
[mysqld]
skip-networking

Pengguna Database

Seorang administrator sistem yang baik, apalagi kalau 'Paranoid Admin Detected', akan selalu mengisolasi user2-nya agar tidak jalan-jalan kemana-mana. Begitu juga dengan database MySQL. Disarankan sebaiknya tidak menggunakan user root kalau tidak perlu sekali. Buat user dengan hak akses terbatas ke satu atau beberapa database dan gunakan user tersebut di aplikasi-aplikasi anda.
Kita dapat melakukannya seperti ini:
$ mysql -h localhost -u root -p
mysql> create database tripleX;
mysql> create user 3xxx identified by password 'passwordnya_3xxx';
mysql> grant CREATE,INSERT,DELETE,UPDATE,SELECT on tripleX.* to 3xxx@localhost;
mysql> flush privileges;
mysql> exit;

No comments:

Post a Comment