Wednesday, November 7, 2012

Seri Maintenance Server (Bag 2)

Melanjutkan tulisan Seri Maintenance Server Bagian 1 yang membahas rutin-rutin perampingan data, kali ini penulis akan membahas mengenai masalah Replikasi MySQL.

Replikasi MySQL merupakan fitur yang disediakan oleh MySQL untuk melakukan backup data secara realtime/simultan pada 2 mesin (master dan slave) yang terpasang MySQL. Namun ada harga yang harus dibayar jika kita menggunakan fitur ini, antara lain turunnya performa database (sekitar 1%) dan Anda harus siap menampung data log yang ukurannya cepat sekali membengkak.

Jika Anda siap menerima konsekuensi diatas, mari kita mulai saja implementasi Replikasi MySQL pada mesin kita.

Pada contoh berikut ini penulis melakukan pengalamatan IP komputer sbb:
  • Komputer Server (master): 192.168.2.2
  • Komputer Replikasi (slave): 192.168.20
Pada komputer server (master)
  • Jalankan MySQL Command Line Client dan lakukan Login
  • Pada command line ketikkan perintah berikut
grant replication slave on *.* to'replikasi'@'192.168.2.20' identified by '123456'; 
*.* menunjukkan semua nama database MySQL
'replikasi' merupakan username yang nanti digunakan oleh komputer replikasi untuk mengakses server utama
'192.168.2.20' adalah Alamat IP komputer replikasi
'123456' merupakan password yang digunakan komputer replikasi untuk mengakses server utama
  • Stop Service MySQL melalui MySQL Administrator (Service Control > Stop Service)
  • Hapus file iblogfile0 dan iblogfile1 yang ada pada folder data pada direktori MySQL dan kemudian copy folder data tersebut
  • Sebelum melakukan langkah berikutnya, lanjutkan terlebih dahulu proses pada komputer replikasi (slave)
  • Buka file my.ini di direktori MySQL
  • Tambahkan script berikut tepat dibawah [mysqld]
server-id=1
binlog-do-db=refill_mlm
log-bin=server.bin
expire-logs-days=7
  • Jalankan Service MySQL kembali (Service Control > Start Service)
Pada komputer replikasi (slave)
  • Stop Service MySQL melalui MySQL Administrator (Service Control > Stop Service)
  • Rename folder data pada direktori MySQL (menjadi misal data.old)
  • Letakkan folder data hasil copy dari server / komputer master pada proses sebelumnya
  • Buka file my.ini di direktori MySQL
  • Tambahkan script berikut tepat dibawah [mysqld]
server-id=2
master-host=192.168.2.2
master-port=3306
master-user=replikasi
master-password=123456
master-connect-retry=60
relay-log=WEBSERVER-relay-bin
read-only
replicate-ignore-table=refill_mlm.sms_history
replicate-ignore-table=refill_mlm.sms_inbox
replicate-ignore-table=refill_mlm.sms_outbox
replicate-ignore-table=refill_mlm.log_saldo
replicate-ignore-table=refill_mlm.logs
master-host adalah alamat IP server
replicate-ignore-table adalah table-table yang tidak ikut direplikasi
  • Sebelum melakukan langkah selanjutnya (menjalankan Service MySQL pada komputer replikasi), selesaikan terlebih dahulu proses pada komputer server (master)
  • Jalankan Service MySQL kembali (Service Control > Start Service)

Tuesday, November 6, 2012

Seri Maintenance Server (Bag 1)

Kira-kira setiap 3 bulan sekali penulis selalu melakukan maintenance database server. Hal ini diperlukan demi menjaga performa database tetap pada kondisi 'siap tempur', mengingat tiap hari sistem dibanjiri dengan data yang luar biasa banyaknya.

Sebenarnya proses maintenance server (yang penulis biasa lakukan sesuai dengan kondisi server yang ditangani penulis) dapat dikelompokkan menjadi 2 proses besar yaitu:

  1. Pemotongan Database, sehingga ukuran database (baik data yang tersimpan didalamnya maupun ukuran fisik database) menjadi ramping kembali.
  2. Replikasi database (perihal Replikasi Database ini akan dijelaskan pada tulisan berikutnya)


Peralatan yang perlu dipersiapkan untuk proses ini adalah MySQL Administrator, secangkir kopi dan beberapa batang rokok (optional)

Berikut langkah-langkah yang dilakukan:
1. Jalankan MySQL Administrator dan lakukan Login

2. Stop Service MySQL (Service Control > Stop Service)

3. Backup Data Anda terlebih dahulu
Penulis biasa melakukan backup data dengan cara cepat yaitu melakukan copy folder data pada direktori MySQL

4. Jalankan Service MySQL kembali (Service Control > Start Service), Reconnect jika diperlukan

5. Jalankan MySQL Query Browser (Tool > MySQL Query Browser)

  • Make Default Schema database refill_mlm (atau database yang dikehendaki) pada Schemata
  • Jalankan query yang diperlukan untuk keperluan pemotongan database, berikut contohnya:
    • select * from transaksi order by id_transaksi asc limit 0,100;
    • delete from transaksi_pulsa where id_transaksi <= '28925544';
    • delete from sms_history where tgl_input <= '2012-10-31 23:59:59';
    • delete from log_saldo where tgl <= '2012-10-31 23:59:59';

7. Backup data yang telah dipotong tersebut (Backup > Backup Project > New Project > Schemata (contoh: refill_mlm) > Backup Content (All) > Execute Backup Now

8. Stop Service MySQL (Service Control > Stop Service)

9. Copy Folder Data yang berisi Fresh Database (Database Kosong), folder data yang lama dapat Anda rename menjadi (misal) data.old

10. Jalankan Service MySQL kembali (Service Control > Start Service), Reconnect jika diperlukan

11. Restore Data hasil dari langkah 7 (Restore > General > Open Backup File)

12. Atur & Sesuaikan Schema Priveleges User pada User Administration

  • Pada User Accounts root, klik kanan Add Host from which the user can connect
  • Tambahkan 192.168.%
  • Atur Schema Priveleges pada 192.168.%
    • Pilih Schemata refill_mlm (atau database yang dikehendaki)
    • Tambahkan hak berikut pada Assigned Priveleges (sesuaikan dengan keperluan):
      • SELECT
      • INSERT
      • UPDATE
      • DELETE
      • CREATE
      • DROP
      • CREATE_TMP_TABLE

13. Jangan lupa untuk selalu rutin mengganti password

  • Pada User Accounts root, silakan ganti password host yang tersedia
    • localhost
    • 127.0.0.1
    • 192.168.%