Arsip Tag: MySQL

Sharing; Rilis Kedua Keuangan Guyub versi KG-20100717-2

Berikut kutipan dari Blog resmi Keuangan Guyub;

Bismillahirrahmanirrahim

Hari ini 17 Juli 2010, kami merilis versi kedua dari Keuangan Guyub – Aplikasi Keuangan Open Source untuk UKM Jasa.

Silahkan langsung download paket rilisnya pada link berikut;

Adapun versi kedua ini berisi;

  1. Semua fitur yang telah ada pada rilis pertama minus Laporan Neraca Sebelum Penyesuaian dan Laporan Neraca Sesudah Penyesuaian yang dihilangkan.
  2. Semua perbaikan dari issues/bugs di rilis pertama.
  3. Fitur standar grafik untuk Open Flash Chart, dimana contoh grafiknya sudah ada di Home yaitu Grafik Laba Rugi Bulanan.
  4. Fasilitas untuk migrasi dari manual atau sistem akuntansi lain berupa submenu Saldo Awal di Menu Manajemen.

Dan yang tidak kalah penting, kami juga sangat mengharapkan saran, masukan, kritikan dan kontribusi dari teman-teman semua, bisa melalui halaman blog ini, wiki atau mailing list Keuangan Guyub.

Semoga berkah dan bermanfaat,

Guyub – Palembang, Indonesia

Iklan

Coba-coba Materi Backup Database MySQL di Ubuntu Server (Manual dan Otomatis)

Ntar sore Bair kebagian jatah preman untuk isi materi belajar bareng Ubuntu bulan Maret ini, jadi mumpung masih pagi sambil coba-coba dan review lagi sekalian aja dijadiin posting blog :D.

Untuk versi Ubuntu Server kita selalu menggunakan terminal/text based (walaupun sebenarnya tetap bisa menginstal dan mengaktifkan GUI juga sih, atau bahkan menjadikan Ubuntu Desktop sebagai server). Jadi oleh karena itu semua langkah di sini juga akan berbasis perintah text.

Pertama-tama saya akan memperkenalkan perintah umum untuk melakukan backup secara manual MySQL. 2 command yang umum standar bawaan mysql client adalah mysqldump dan mysqlhotcopy. Disini tidak perlu dijelaskan lebih lanjut, toh langkahnya tinggal jalankan perintah tersebut dengan opsi-opsi sesuai kebutuhan kita. Untuk lebih jelasnya langsung lihat dokumentasinya resminya aja di;

Nah yang akan dicoba disini adalah yang cara otomatis. Skenarionya disini kita pengen biar komputer kita (bisa server MySQL itu sendiri atau komputer lain yang dapat mengakses MySQL di server) dapat melakukan backup otomatis terhadap database yang diinginkan pada lokasi dan waktu yang diinginkan.

Dan ternyata sebagaimana yang sering saya cerita ke teman-teman, salah satu sisi baik dari begitu banyak sisi buruk  teknologi kita tertinggal dari tempat lain adalah hampir semua kebutuhan kita sudah ada yang bantuin bikin tools bahkan lengkah dengan caranya, jadi tinggal kita gunakan 😀 hehehe. Dan pada kasus ini kita bisa menggunakan scrip AutoMySQLBackup.

OK langkah-langkah detailnya ya adalah sebagai berikut;

1. Download AutoMySQLBackup;

guyub@guyub-router:~$ wget http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%202.5/automysqlbackup.sh.2.5?use_mirror=nchc
–10:59:15–  http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%202.5/automysqlbackup.sh.2.5?use_mirror=nchc

=> `automysqlbackup.sh.2.5?use_mirror=nchc’
Resolving downloads.sourceforge.net… 216.34.181.59
Connecting to downloads.sourceforge.net|216.34.181.59|:80… connected.
HTTP request sent, awaiting response… 302 Found
Location: http://nchc.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%202.5/automysqlbackup.sh.2.5 [following]
–10:59:16–  http://nchc.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%202.5/automysqlbackup.sh.2.5
=> `automysqlbackup.sh.2.5′
Resolving nchc.dl.sourceforge.net… 211.79.60.17
Connecting to nchc.dl.sourceforge.net|211.79.60.17|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 25,316 (25K) [application/x-sh]

100%[=================================================================================>] 25,316        23.35K/s

Biar teratur aplikasi ini kita pindahkan saja ke /opt

guyub@guyub-router:~$ sudo mv automysqlbackup.sh.2.5 /opt/

2. Setelah itu coba edit script tersebut, dan sesuaikan dengan kondisi dan kebutuhan kita.

guyub@guyub-router:/opt$ sudo nano automysqlbackup.sh.2.5

Nah ketika terbuka pada contoh ini saya hanya ingin melakukan edit standar saja yaitu pada koneksi database-nya, sedangkan yang lainnya dibiarkan default, jadi saya mengubah username, password dan nama database pada bagian ini;

# Username to access the MySQL server e.g. dbuser
USERNAME=root

# Username to access the MySQL server e.g. password
PASSWORD=passworduntukroot

# Host name (or IP address) of MySQL server e.g localhost
DBHOST=localhost

# List of DBNAMES for Daily/Weekly Backup e.g. “DB1 DB2 DB3″
DBNAMES=” schema_coba  schema_coba2″

Perhatikan untuk nama dabatase disitu terlihat saya melakukan backup terhadap 2 database; schema_coba  dan schema_coba2. Jika ingin menambahkan database lagi cukup tambahkan dan pisahkan dengan spasi.

Oh ya sebagai tambahan agar bisa terlacak, saya juga menambahkan perintah untuk membuat log pada setiap kali aplikasi ini dieksekusi. Caranya cukup dengan menambahkan script seperti ini di automysqlbackup.sh.2.5;

echo “Berhasil backup: $(date)” >> /tmp/backupmysql-testing.log

Baris ini akan memerintahkan untuk membuat atau menambahkan file text biasa berekstensi log bernama backupmysql-testing di /tmp.

3. Selanjutnya saya membuat cron di Server

Lihat waktu saat ini biar hasil cron nya bisa segera kita lihat berhasil apa tidak 😀

guyub@guyub-router:/opt$ date
Sun Mar 28 11:18:39 WIT 2010

guyub@guyub-router:~$ sudo crontab -e

Setelah masukkan pasword tambahkan aja baris ini;

25 11 * * * sh /opt/automysqlbackup.sh.2.5

Artinya adalah memerintahkan server untuk menjalankan script tersebut setiap hari pada pukul 11.25 AM. Selanjutnya tinggal di-save aja.

4. Nah sebenarnya langkah-langkahnya sudah selesai sampai langkah ke 3 tadi, jika semuanya sudah betul maka harusnya di server kita MySQL sudah terbackup secara otomatis, dimana standarnya akan ada backup harian, mingguan dan bulanan, serta ditaruh di folder /backups.

Langkah-langkah berikut ini hanya opsional aja untuk Quality Assurance *caillah* apakah langkah kita sudah tepat dan benar-benar sudah betul.

guyub@guyub-router:~$ ls -al /backups/
total 20
drwxr-xr-x  5 root root 4096 2010-03-28 11:25 .
drwxr-xr-x 22 root root 4096 2010-03-28 11:25 ..
drwxr-xr-x  4 root root 4096 2010-03-28 11:25 daily
drwxr-xr-x  2 root root 4096 2010-03-28 11:25 monthly
drwxr-xr-x  4 root root 4096 2010-03-28 11:25 weekly
guyub@guyub-router:~$ ls -al /backups/daily/
total 16
drwxr-xr-x 4 root root 4096 2010-03-28 11:25 .
drwxr-xr-x 5 root root 4096 2010-03-28 11:25 ..
drwxr-xr-x 2 root root 4096 2010-03-28 11:25 schema_coba
drwxr-xr-x 2 root root 4096 2010-03-28 11:25 schema_coba2
guyub@guyub-router:~$ ls -al /backups/daily/schema_coba
total 12
drwxr-xr-x 2 root root 4096 2010-03-28 11:25 .
drwxr-xr-x 4 root root 4096 2010-03-28 11:25 ..
-rw-r–r– 1 root root  840 2010-03-28 11:25 schema_coba_2010-03-28_11h25m.Sunday.sql.gz

Oh ya coba juga lihat log di /tmp tadi;

guyub@guyub-router:~$ nano /tmp/backupmysql-testing.log

Berhasil backup: Sun Mar 28 11:25:01 WIT 2010

——-
Demikian semoga berkah dan bermanfaat

Belajar Bareng Ubuntu di Palembang Bulan Maret 2010

Ketemuan Ubuntu bulan Maret 2010 akan diadakan pada tanggal 28 Maret 2010, detail informasinya;

Tempat: Guyub – Jl. KHA Dahlan No. 74 – Palembang

Hari/Tanggal: Minggu/28 Maret 2010

Waktu: Pukul 16.00 WIB (4 sore)

Pemateri: Subair

Materi: Backup Database MySQL di Ubuntu Server (manual dan menggunakan AutoMySQLBackup)

Demikian penyampainnya, diharapkan bagi teman-teman yang membaca info ini dapat menyampaikan ke temannya yang lain.

Tips Menggabungkan String dengan Karakter Tertentu Sebagai Pemisah/Separator di Query MySQL

Bagi teman-teman yang sudah sering mengerjakan aplikasi khususnya Sistem Informasi pasti sudah sangat sering bermain dengan fungsi-fungsi string, seperti halnya fungsi implode() di PHP yang digunakan untuk menggabungkan beberapa substring (dalam bentuk array) menjadi satu menggunakan karakter tertentu sebagai pemisahnya.

Pada beberapa kasus penggabungan string ini tidak bisa dilakukan di level bahasa pemrograman tetapi harus dilakukan atau jauh lebih efisien apabila diperoleh dari masukan hasil query-nya, seperti yang saya temukan pada pekerjaan terakhir saya menggunakan MySQL.

Dan ternyata setelah bertanya ke Om Google, tugas sebagai DBA/Dev sangat dipermudah dengan fungsi-fungsi yang telah disediakan oleh MySQL. Dua fungsi yang bisa digunakan disisi query adalah fungsi group_concat() dan concat_ws().

Tentang cara penggunaan dan letak perbedaan dari kedua fungsi diatas, lebih enak langsung kita coba dalam contoh sederhana;

Ok, pertama-tama kita buat table percobaan bernama ‘perusahaan’ dan kita isi data untuk latihan;

create table perusahaan (id int unsigned not null auto_increment primary key, perusahaan_id int unsigned not null default 0, jenis enum('Terbuka', 'Tertutup') not null, direktur varchar(25) not null default '', wakil_direktur_1 varchar(25) not null default '', wakil_direktur_2 varchar(25) not null default '', wakil_direktur_3 varchar(25) not null default '');

insert into perusahaan (perusahaan_id, jenis, direktur, wakil_direktur_1, wakil_direktur_2, wakil_direktur_3) values (1, 'Tertutup', 'Direktur AAA', 'Wakil 1 AAA', '', ''), (200, 'Terbuka', 'Direktur ZZZ', 'Wakil 1 ZZZ', '', 'Wakil 3 ZZZ'), (3, 'Tertutup', 'Direktur CCC', 'Wakil 1 CCC', 'Wakil 2 CCC', 'Wakil 3 CCC');

select * from perusahaan;
+----+---------------+----------+--------------+------------------+------------------+------------------+
| id | perusahaan_id | jenis    | direktur     | wakil_direktur_1 | wakil_direktur_2 | wakil_direktur_3 |
+----+---------------+----------+--------------+------------------+------------------+------------------+
|  1 |             1 | Tertutup | Direktur AAA | Wakil 1 AAA      |                  |                  |
|  2 |           200 | Terbuka  | Direktur ZZZ | Wakil 1 ZZZ      |                  | Wakil 3 ZZZ      |
|  3 |             3 | Tertutup | Direktur CCC | Wakil 1 CCC      | Wakil 2 CCC      | Wakil 3 CCC      |
+----+---------------+----------+--------------+------------------+------------------+------------------+

Maka table-nya menjadi sebagai berikut

Untuk menggabungkan beberapa row menjadi satu bagian kita menggunakan fungsi group_concat(), misal kita ingin mengelompokkan nama-nama direktur berdasarkan jenis perusahaannya, maka kita bisa menggunakan query;

 select jenis as 'Jenis', group_concat(direktur) as 'Nama-Nama Direktur' from perusahaan group by jenis;
+----------+---------------------------+
| Jenis    | Nama-Nama Direktur        |
+----------+---------------------------+
| Terbuka  | Direktur ZZZ              |
| Tertutup | Direktur AAA,Direktur CCC |
+----------+---------------------------+

Sedangkan untuk menggabungkan beberapa kolom dalam row yang sama, kita bisa menggunakan fungsi concat_ws(), misal disini kita akan menggabungkan Nama-nama anggota dewan direktur di setiap perusahaan, maka query-nya adalah;

 select perusahaan_id as 'Kode Perusahaan', concat_ws(',', direktur, wakil_direktur_1, wakil_direktur_2, wakil_direktur_3) as 'Jajaran Direktur' from perusahaan;
+-----------------+--------------------------------------------------+
| Kode Perusahaan | Jajaran Direktur                                 |
+-----------------+--------------------------------------------------+
|               1 | Direktur AAA,Wakil 1 AAA,,                       |
|             200 | Direktur ZZZ,Wakil 1 ZZZ,,Wakil 3 ZZZ            |
|               3 | Direktur CCC,Wakil 1 CCC,Wakil 2 CCC,Wakil 3 CCC |
+-----------------+--------------------------------------------------+

Pada kasus percobaan kita hasil diatas terlihat ada sedikita kesalahan dimana ternyata concat_ws() juga menganggap string kosong ada dan dipisahkan dengan koma, padahal kita ingin jika string kosong itu diabaikan, misal pada perusahaan dengan kode 200 disitu hasilnya “Direktur ZZZ,Wakil 1 ZZZ,,Wakil 3 ZZZ”. Maka disini query-nya tinggal kita modifikasi sedikit dengan fungsi if() untuk merubah string kosong menjadi NULL, sehingga menjadi;

 select perusahaan_id as 'Kode Perusahaan', concat_ws(',', if(direktur!='',direktur, NULL), if(wakil_direktur_1!='',wakil_direktur_1, NULL),if(wakil_direktur_2!='',wakil_direktur_2, NULL), if(wakil_direktur_3!='',wakil_direktur_3, NULL)) as 'Jajaran Direktur' from perusahaan;
+-----------------+--------------------------------------------------+
| Kode Perusahaan | Jajaran Direktur                                 |
+-----------------+--------------------------------------------------+
|               1 | Direktur AAA,Wakil 1 AAA                         |
|             200 | Direktur ZZZ,Wakil 1 ZZZ,Wakil 3 ZZZ             |
|               3 | Direktur CCC,Wakil 1 CCC,Wakil 2 CCC,Wakil 3 CCC |
+-----------------+--------------------------------------------------+

Nah mudah kan, tentang karakter separatornya bisa diganti-ganti sesuai dengan kebutuhan, caranya tinggal lihat aja di link dokumentasi diatas. 😀

Replikasi Database MySQL di Linux Ubuntu – Pengantar Belajar Bareng Bulan Juli

Bulan ini Bair kebagian jatah preman untuk ngisi materi di sharing bulanan komunitas Ubuntu SumSel (Minggu, 26 Juli 2009, jam 4). Awalnya sih mau dibikin acara nonton film aja biar penyegaran :), tapi belum nemu film bagus dengan durasi setengah jam yang berkaitan atau sekedar nyinggung open source. Jadi Bair putuskan untuk ngisi dengan ngobrol-ngobrol bebas bin santai seputar database server dengan Linux Ubuntu.

Berhubung bahasan database server cukup luas, maka rencananya akan ada bahasan dan demo yang bisa langsung dilihat dengar dan rasakan oleh yang hadir sebagai pengantar dan pembuka sharing. Nah pembukanya dipilih yang sederhana aja tapi cukup menarik yaitu replikasi database MySQL menggunakan 2 mesin server berbasis Ubuntu.

Jadi sebelum tulis blog ini Bair coba-coba dulu replikasi sederhana dari MySQL, biar langkah-langkahnya bisa langsung dicatat dan dijadikan tutorial di blog, yang harapannya teman-teman yang mau datang bisa baca-baca dulu dan syukur-syukur nyobain, biar hari Minggu ntar kita bisa punya lebih banyak waktu berbicara bahasa yang lebih manusiawi :), dan melebarkan obrolannya ke hal-hal lain yang berkaitan :).

TKP Tes Replikasi MySQL di Ubuntu

TKP Tes Replikasi MySQL di Ubuntu

Supaya ceritanya bikin penasaran *emang ada Ir? hehe*, lanjutan tulisan di bawah ini hanya akan membahas tutorial sederhana replication antara 2 mesin berbasis Ubuntu, dan tidak akan membahas hal lain semisal prinsip-prinsip replikasi, pengertian, kegunaan, dan lain-lain berkaitan dengan replikasi MySQL, jadi kalau ada yang mau bahas silahkan komentar, googling atau datang aja di pertemuan hari Minggu ini :).

OK, monggo disimak dan dibetulkan kalau ada yang keliru tutorialnya (jarang-jarang nih Bair bikin tutorial :D);

I. Pertama-tama siapkan semua kebutuhan yaitu 2 mesin berbasis Ubuntu yang telah diinstal MySQL (kalau bisa versi terbaru, walaupun replikasi sebenarnya sudah tersedia sejak MySQL versi 3.23.15). Nah mesin pertama (misal IP: 192.168.1.100) yang akan kita gunakan sebagai Master dan yang kedua (misal IP: 192.168.1.101) sebagai Slave, pastikan terkoneksi dalam jaringan dan tidak ada masalah dengan port yang digunakan MySQL (defaultnya 3306).

II. Selanjutnya kita mulai dengan mengkonfigurasi mesin Master. Adapun yang harus dilakukan adalah;

a. Membolehkan (enable) networking untuk MySQL, sehingga MySQL di mesin ini bisa diakses dari jaringan/berbagai IP Address. Caranya dengan memastikan pada my.cnf (biasanya di /etc/mysql/my.cnf) 2 baris, ‘skip-networking’ dan ‘bind-address=127.0.0.1″ tidak aktif dengan menambahkan karakter komentar (#) di awal barisnya, sehingga menjadi;

# skip-networking
# bind-address  = 127.0.0.1

b. Selanjutnya setup lokasi file log-bin, nama database (di tutorial ini kita akan menggunakan database employee) dan id-server;

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=employee
server-id=1

c. Agar konfigurasi baru bisa langsung berfungsi, silahkan restart MySQL dengan perintah sudo /etc/init.d/mysql restart

d. Setelah itu masuk ke dalam mysql dengan perintah di terminal mysql -u root -p, di terminal ketika connect ke MySQL maka prompt-nya akan berubah dari $ (atau #) menjadi mysql> . Nah disini kita akan membuat user baru database MySQL yang akan diberi hak untuk melakukan replikasi;

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘password_slave_user’;
mysql> FLUSH PRIVILEGES;

ket= username ‘slave_user’ dan password ‘password_slave_user’ silahkan diganti sesuai keinginan

e. Setelah itu kita ambil informasi binary log dari database yang kita ingin replikasi,

mysql> USE employee;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

Maka akan muncul keluaran yang mirip seperti ini;

+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000003 |       98 | employee     |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

Simpan informasi ini untuk digunakan pada konfigurasi di mesin Slave.  Setelah itu jangan lupa unlock dulu semua table tadi, dan keluar dengan perintah;

mysql> UNLOCK TABLES;
mysql> FLUSH PRIVILEGES;
mysql> exit;

f. Selanjutnya backup database employee yang akan kita replikasi, untuk nantinya kita restore di Slave agar kondisi database di kedua mesin adalah sama. Ini bisa dilakukan di terminal dengan perintah;

$ sudo mysqldump -u root -p<password> –opt employee > employee.sql

III. Langkah selanjutnya adalah mengatur konfigurasi mesin Slave-nya, adapun yang harus dilakukan adalah;

a. Dari terminal kita masuk ke MySQL, setelah itu kita buat database baru bernama employee sama seperti di Master, dan langsung keluar;

mysql> CREATE DATABASE employee;
mysql> exit;

b. Di terminal restore backup database employee dari Master dengan perintah

$ sudo mysql -u root -p<password> employee < /lokasi/folder/employee.sql

c. Selanjutnya konfigurasi file my.cnf di mesin Slave, sesuai dengan konfigurasi jaringan dan Master sebelumnya;

server-id=2
master-host=192.168.1.100
master-user=slave_user
master-password=password_slave_user
master-connect-retry=60
replicate-do-db=employee

Ket: nilai server-id, dapat diganti dengan angkat integer positif selain 1 yang sudah dipakai oleh Master

d. Restart MySQL agar konfigurasi baru bisa berjalan.

e. Kemudian masuk lagi ke mysql di terminal dan jalankan, perintah berikut ini;

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’password_slave_user‘, MASTER_LOG_FILE=’mysql-bin.000003‘, MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> FLUSH PRIVILEGES;
mysql> exit;

IV. Silahkan ditest, harusnya kalau tidak ada langkah yang salah (bisa jadi Anda yang salah mengikuti tutorial ini, atau tutorial Bair memang ada yang salahnya :D) maka jika di Master terjadi perubahan, maka Slave akan ikut-ikutan.

nb: update 090724 – 5 PM; nambahin baris ini (mysql> CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’password_slave_user’, MASTER_LOG_FILE=’mysql-bin.000003′, MASTER_LOG_POS=98; ) , sorry kelupaan 😀

Sampai ketemu hari Minggu 😀

mysql> CHANGE MASTER TO MASTER_HOST=’192.168.0.6′, MASTER_USER=’slave_user’, MASTER_PASSWORD='<some_password>’, MASTER_LOG_FILE=’mysql-bin.006′, MASTER_LOG_POS=167;

Tips mudah menyetel konfigurasi MySQL menggunakan MySQLTuner di Linux

Sering kita dengar ada yang mengeluhkan performa aplikasinya baik desktop maupun web, dan buru-buru menyalahkan database MySQL. Padahal diluar sana, banyak sekali contoh-contoh aplikasi/web yang data dan traffiknya jauh lebih dasyat dengan jutaan baris dalam tabel dan request gila-gilaan, terbukti tetap bisa terhandle dengan baik, contoh saja Facebook, Yahoo, Google (katanya sih pada Adsense, cmiiw), dan lain-lain. Oh ya, aplikasi tabulasi pemilu yang dikerjakan teman-teman SERIS juga menggunakan database MySQL ini.

Berbicara tentang performa, database setidaknya tergantung akan 3 hal, yaitu ketangguhan dari Mesin Server Database MySQL, code query/aplikasi dan settingan konfigurasi server.

Untuk mesin server sih tentu saja dilakukan dengan meningkatkan performa server baik melalui scale-in maupun scale-out, memilih OS serta environment yang tepat, dan lain-lain. Sedangkan untuk code dan query, kita bisa merapikan code kita agar tidak hanya efektif tapi juga harus efisien, hmm.. untuk tahap awal saya kira mengikuti 84 tips dari komunitas (MySQL Camp 2006) sudah sangat lumayan :D.

Nah sekarang Bair mau coba perlihatkan salah satu cara sederhana untuk membantu kita melakukan konfigurasi MySQL-nya di mesin Linux kita (my.cnf) menggunakan MySQLTuner (yang saya juga sebenarnya tahu dari web Ubuntu Geek :D).

Adapun langkah-langkahnya sebagai berikut;

1. Pertama-tama siapkan mesin dengan OS Linux dan MySQL -> Warning: Ini wajib, soalnya apa yang mau dites, kalau tidak ada hehehe..

Coba kita lihat kondisi komputer server abal-abalan Bair untuk coba-coba ini;

guyub@guyub:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION=”Ubuntu 8.04″

guyub@guyub:~$ cat /proc/cpuinfo |grep “processor\|model name”
processor    : 0
model name      : AMD Athlon(tm)

guyub@guyub:~$ cat /proc/meminfo |grep Mem
MemTotal:       515608 kB
MemFree:         28408 kB

guyub@guyub:~$ mysql –version
mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

2. Setelah itu instal, MySQLTuner, di Ubuntu bisa

sudo aptitude install mysqltuner

atau download scriptnya

wget http://mysqltuner.com/mysqltuner.pl

3. Kemudian jalankan scriptnya di terminal dan lihat hasilnya;

guyub@guyub:~$ chmod +x mysqltuner.pl

guyub@guyub:~$ sudo ./mysqltuner.pl

>>  MySQLTuner 1.0.0 – Major Hayden <major@mhtx.net>
>>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
>>  Run with ‘–help’ for additional options and output filtering
[!!] Successfully authenticated with no password – SECURITY RISK!

——– General Statistics ————————————————–
[–] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.0.51a-3ubuntu5.4
[OK] Operating on 32-bit architecture with less than 2GB RAM

——– Storage Engine Statistics ——————————————-
[–] Status: +Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[!!] InnoDB is enabled but isn’t being used
[OK] Total fragmented tables: 0

——– Performance Metrics ————————————————-
[–] Up for: 2751d 1h 54m 58s (972 q [0.000 qps], 12 conn, TX: 239K, RX: 38K)
[–] Reads / Writes: 100% / 0%
[–] Total buffers: 58.0M global + 2.6M per thread (100 max threads)
[OK] Maximum possible memory usage: 320.5M (63% of installed RAM)
[OK] Slow queries: 0% (0/972)
[OK] Highest usage of available connections: 2% (2/100)
[!!] Cannot calculate MyISAM index size – re-run script as root user
[!!] Query cache efficiency: 0.0% (0 cached / 7 selects)
[OK] Query cache prunes per day: 0
[OK] Temporary tables created on disk: 0% (0 on disk / 33 total)
[OK] Thread cache hit rate: 83% (2 created / 12 connections)
[!!] Table cache hit rate: 7% (64 open / 905 opened)
[OK] Open file limit used: 12% (124/1K)
[OK] Table locks acquired immediately: 100% (906 immediate / 906 locks)

——– Recommendations —————————————————–
General recommendations:
Add skip-innodb to MySQL configuration to disable InnoDB
Enable the slow query log to troubleshoot bad queries
Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
query_cache_limit (> 1M, or use smaller result sets)
table_cache (> 64)

4. Nah, selanjutnya terserah kita, mau rubah settingan my.cnf sesuai dengan yang direkomendasikan (lihat bagian Recommendations), atau tidak, atau bisa juga mencari second, third ..  opinion dulu :D.