AdityaDees: Database

Hot

https://publishers.chitika.com/

Contact us for advertising.
Showing posts with label Database. Show all posts
Showing posts with label Database. Show all posts

04 August 2014

Memindahkan Direktori Database MySQL di Ubuntu GNU/Linux

19:14 0


Baru baru ini saya meng-install sistem operasi desktop Ubuntu versi 14.04.1 LTS ke laptop dan salah satu aplikasi "wajib" adalah database server MySQL, karena hampir semua aplikasi web yang saya bangun menggunakan MySQL sebagai backend-nya. Salah satu kebiasaan saya ketika meng-install MySQL adalah memindahkan direktori tempat MySQL menyimpan semua databasenya ke lokasi non-standar, yang by default berlokasi di /var/lib/mysql, saya pindahkan ke lokasi /home/direktori/mysql misalnya. Hal ini saya lakukan agar memudahkan pemindahan dan backup data apabila Ubuntu-nya akan saya upgrade ke versi major.


Ternyata memindahkan direktori database MySQL di distro GNU/Linux populer seperti Ubuntu dan CentOS tidak semudah zaman dahulu, seperti zaman Ubuntu versi 8.04 dulu (lama banged yak :p) misalnya. Kalau dulu cukup ubah konfigurasi di file konfigurasi /etc/my.cnf, ubah permission direktori, restart daemon semua langsung jalan. Dengan semakin tinggi-nya keamanan di lapisan aplikasi ada beberapa hal yang harus kita lakukan untuk memindahkan direktori database MySQL di distro Ubuntu 14.04. Berikut akan saya paparkan caranya.


Ubah konfigurasi di my.cnf


Tahap pertama adalah dengan mengubah/memodifikasi file konfigurasi utama MySQL, my.cnf, yang pada Ubuntu terletak pada direktori /etc/mysql. Pada konfigurasi default kita akan melihat konfigurasi seperti ini:

...
[mysqld]
#
# * Basic Settings
#
...
datadir = /var/lib/mysql/
...


Ubah file my.cnf dengan text editor favorit anda, dan ubah pada bagian parameter datadir dan pada bagian InnoDB menjadi sebagai berikut:

...
[mysqld]
#
# * Basic Settings
#
...
datadir = /home/adityadees/mysql # sesuaikan dengan direktori baru database MySQL yang kita inginkan
...
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
innodb_data_home_dir = /home/adityadees/mysql/
innodb_log_group_home_dir = /home/adityadees/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
...


Simpan perubahan file tersebut.


Selanjutnya buka program Terminal dan ubah ownership direktori baru database MySQL kita (dalam hal ini /home/adityadees/mysql), agar bisa diakses oleh daemon server MySQL, sekaligus kita copy-kan isi direktori /var/lib/mysql ke direktori baru kita dengan perintah:

adityadees@localhost:~$ sudo cp -R /var/lib/mysql/* /home/adityadees/mysql/
adityadees@localhost:~$ sudo chown -R mysql /home/adityadees/mysql



Ubah setting AppArmor



Distro GNU/Linux populer biasanya menggunakan AppArmor, sebuah modul sistem keamanan kernel Linux yang salah satu fungsinya adalah membatasi aplikasi-aplikasi tertentu di lingkungan GNU/Linux, agar hanya bisa mengakses berkas atau direktori tertentu. Untuk lebih jelasnya mengenai AppArmor bisa kita baca di Wiki AppArmor. Agar daemon server MySQL bisa mengakses direktori database baru yang sudah kita ubah di file my.cnf, kita harus mengubah konfigurasi AppArmor MySQL dengan memodifikasi file /etc/apparmor.d/local/usr.sbin.mysqld. Tambahkan baris berikut pada berkas tersebut:

# Site-specific additions and overrides for usr.sbin.mysqld.
# For more details, please see /etc/apparmor.d/local/README.
/home/adityadees/mysql/* rw


Simpan perubahan berkas tersebut kemudian jalan perintah berikut pada Terminal:
adityadees@localhost:~$ sudo /etc/init.d/apparmor reload


Restart server MySQL



Selanjutnya adalah me-restart server MySQL kita dengan perintah:

adityadees@localhost:~$ sudo /etc/init.d/mysql restart


Apabila semua berjalan lancar, maka kita telah berhasil memindahkan direktori database MySQL kita ke lokasi yang baru yang kita inginkan. Ada kemungkinan cara ini juga berhasil untuk database server MariaDB, tetapi saya belum mencobanya. Semoga bermanfaat dan selamat mencoba :).

Read More

04 April 2007

MySQL Improved alias MySQLI!

10:27 0

Sejak PHP 5 dirilis, muncul extension baru sebagai API ke RDBMS MySQL. Extension baru ini dinamakan MySQLI atau MySQL Improved. MySQLI memperkenalkan cara baru dalam berinteraksi dengan database server MySQL melalui PHP (dan konon lebih cepat dan lebih secure, walaupun gw sendiri belum pernah melakukan benchmark).



Yang paling keren menurut gw adalah model OOP baru dari MySQLI ini. Jadi di MySQLI kita bisa menggunakan 2 style coding, OOP ataupun prosedural. Model OOP-nya asyyiik banget dan lengkap.



Untuk nginstall extension MySQLI di Linux cukup gampang, cari aja paket-paket binary yang udah disediain ma distro masing-masing atau kalo kita biasa compile sendiri maka kita harus nambahin flag :



--with-mysqli=shared,/usr/local/mysql/bin/mysql-config



pada command configure kita


Kalo di Windows lebih gampang lagi, cukup tambahin baris :



extension=php_mysqli.dll



pada deretan module-module extension yang laennya di file php.ini. Trus restart deh Web Server-nya.



Langsung aja kita liat contoh implementasi extension MySQLI di source code PHP kita, begini nih caranye :






<?php
 
// buat constant
define('DB_HOST', 'localhost');
define('DB_USER', 'adityadees');
define('DB_PASS', 'adityadeespass');
define('DB_NAME', 'adityadeesdb');
define('DB_PORT', '3306');
 
// cek dulu apa extensionnya dah aktif pa belom?
if (!extension_loaded('mysqli')) {

echo 'Extension MySQLI belum terinstall dengan benar. check php.ini';
exit();
}
 
// buat objek mysqli
$mysqli_obj = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);

 
/* cek apakah koneksi berhasil dilakukan */
if (mysqli_connect_errno()) {
echo 'Koneksi gagal dilakukan dengan alasan : '.mysqli_connect_error();
exit();
} else {

echo 'Koneksi berhasil dilakukan<br />'."\n";
echo 'Versi Server MySQL : '.$mysqli_obj->server_info."<br />\n";

}
 
 
/* tutup koneksi ke db server */
$mysqli_obj->close();
?>







Ya ampuunn, ternyata gampang bener yah!! Weiittsss nanti dulu, itu baru koneksi-nya aja gimana untuk ngirim query ke database server-nya? ini sedikit contoh query SELECT yang menghasilkan resultset (atau recordset, whatever lahh) :






<?php
 
// include file source code koneksi database sebelumnya
// yang misalnya udah kita kasih nama 'mysqli.inc.php';
require 'mysqli.inc.php';
 
// untuk melakukan query kita menggunakan
// metode 'query' milik kelas mysqli

// hasil dari pemanggilan metode ini nantinya akan
// menghasilkan sebuah objek baru milik kelas mysqli_result
$result_obj = $mysqli->query("SELECT nama FROM tabel_adityadees");
 
// cek apakah query berhasil dilakukan
if ($result_obj) {

// gunakan properti publik 'num_rows' milik kelas mysqli_result
// untuk mengetahui jumlah baris hasil query
echo 'Ditemukan '.$result_obj->num_rows.' baris data<br /><br />';

 
echo 'Data-data yang ditemukan adalah sbb : <br />';
 
// gunakan metode 'fetch_row' untuk mengambil data baris demi baris dari resultset
while ($data = $result_obj->fetch_row()) {

echo $data[0].'<br />'."\n";
}
 
// bebaskan memory resultset

$result_obj->close();
}
 
$mysqli_obj->close();
?>









Lohh?? Cuman segitu doank toh MySQLI? Tau gitu mah gw mendingan pake extension MySQL biasa aja dechh (cappeee dehh!!). Ya Enggak Lah!!! ada beberapa fitur baru yang menarik di MySQLI selaen koneksi dan query sederhana, misalnya meng-execute query SQL secara multiple dengan langsung dalam satu statement (bukan dengan pemanggilan metode 'query' berulang-ulang). Coba liat contoh berikut ini deh :






<?php
 
// include file source code koneksi database sebelumnya
// yang misalnya udah kita kasih nama 'mysqli.inc.php';
require 'mysqli.inc.php';
 
// setiap query SQL kita pisahkan dengan semi-colon atawa titik koma
$queries = "SELECT gmd FROM tabel_gmd;";

$queries .= "SELECT nama FROM tabel_adityadees;";
$queries .= "SELECT judul FROM tabel_biblio";
 
// gunakan metode 'multi_query'
// untuk meng-execute string query SQL multiple secara simultan
$multi_query_obj = $mysqli_obj->multi_query($queries);

 
/* execute multi query */
if ($multi_query_obj) {
// loop masing-masing result-nya
while (true) {

// ambil result set multiple query dengan metode 'store_result'
if ($result = $mysqli_obj->store_result()) {
while ($row = $result->fetch_row()) {

echo $row[0]."<br />\n";
}
 
// bebasin memory resultset
$result->close();
}

 
// apakah masih ada resultset lagi?
// kalau udah abis kita stop loop-nya
if (!$mysqli_obj->more_results()) {
break;
} else {

// kita buat pemisah antar resultset dengan garis horizontal HTML <hr>
echo "<hr>\n";
}
}
}
 
/* tutup koneksi ke server */

$mysqli_obj->close();
?>






Nah itu dia sekilas penggunaan extension MySQLI di PHP, masih banyak fitur lain yang saya ga bisa jelasin satu persatu di sini (takutnya blog ini malah isinya MySQLI melulu). Buat programmer PHP yang demen pake model OOP, MySQLI cocok banget untuk digunain sebagai bagian dari kode-kode mereka. SELAMAT MENCOBA!!

Read More

https://payclick.com/

Contact us for advertising.