Saturday, February 7, 2009

replikasi database mysql

Replikasi apaan tuh !!!!!!, kurang lebih maksudnya membuat salinan gitu...
jadi tujuan dari membuat replikasi database salah satunya adalah untuk membuat salinan/backup database dari satu mesin (pc, laptop atau semacamnya) ke mesin (pc, laptop, atau semacamnya) yang lain.

perbedaannya replikasi dan backup database biasa terletak pada otomatisasi backup dan secara realtime (ketika ada perubahan pada database utama maka secara langsung database salinannya akan mengikuti perubahaannya).

feature replikasi ini baru ada di database mysql versi 5.x.x, jadi udah pastinya donk... eksperimen yang ditulis disini pake mysql versi 5.x.x ^_^. Untuk liat spesifikasi database dan operating system yang dipake penulis, bisa diliat diakhir tulisan ini.


OKE, CARA BIKINNYA DIMULAI



Pertama adalah menyiapkan menyiapan 2 mesin (pc, laptop, atau semacamnya), mesin pertama digunakan untuk database utama atau biasa disebut master, dan mesin yang kedua digunakan untuk database salinan atau biasa disebut slave.

Tahap kedua adalah, instal dimasing2 mesin (master dan slave), database mysql nya dan tentunya operating systemnya , dengan direkomendasikan operating systemnya sama dan versi mysql nya sama atau versi mysql di master lebih baru dari yang di slave.

KONFIGURASI DI SISI MASTER

Tahapan selanjutnya adalah melakukan konfigurasi database di master, tapi sebelumnya kita asumsikan lebih dulu kalau database yang akan di replikasi bernama repli_db (jadi database itu udah dibikin dulu atau sudah ada berikut dengan tabel2 nya di master), dan operating systemnya menggunakan linux ubuntu

1. buka file my.cnf (biasanya terletak di
/etc/mysql/my.cnf)
.
2. tambahkan setting2 master di bawah ini

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


penjelasan singkatnya begini:

log_bin = alamat untuk menyimpan log binari mysql
binlog-do-db = nama database yang akan direplikasi
server-id = id dari mesin master

3. membuka akses agar yang bisa mengunakan database tidak hanya dari locahost saja atau ip 127.0.0.1

ubah baris

bind-address = 127.0.0.1

menjadi

#bind-address = 127.0.0.1

4. restart mysql

exit;
sudo /etc/init.d/mysql restart
;

5. masuk ke mysql sebagai root

sudo mysql -uroot -ppassword_root_mu

6. membuat akses slave untuk username slave_user dari ip komputer apa saja dengan passwordnya pass

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;

7. memberikan akses agar username slave_user dapat mengunakan databases

GRANT ALL ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;

8. catat status master dari database repli_db

USE repli_db;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;


+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000119 | 268 | repli_db | |
+------------------+----------+--------------+------------------+


UNLOCK TABLES;


Konfigurasi di sisi master udah selesai, sekarang kita lanjut ke konfigurasi disisi slave


KONFIGURASI DI SISI SLAVE

1. buka file my.cnf (biasanya terletak di /etc/mysql/my.cnf).
2. ketikkan konfigurasi slave (belum termasuk setting replikasinya) dibawah ini

server-id=2
master-host=192.168.10.91
master-user=slave_user
master-password=pass
master-connect-retry=30
replicate-do-db=repli_db


penjelasan singkatnya begini:

server-id = id dari mesin slave
master-host = ip address komputer/mesin master
master-user = user name untuk akses komputer/mesin master
master-password = password untuk akses komputer/mesin master
master-connect-retry = waktu jeda (satuan detik) untuk melakukan koneksi ke master bisa conection ke master putus
replicate-do-db = nama database yang di replikasi

3. restart mysql

exit;
sudo /etc/init.d/mysql restart
;

4. masuk ke mysql sebagai root

sudo mysql -uroot -ppassword_root_mu

5. sekarang inisialisai data atau mengambil data untuk yang pertama kalinya dari master ke slave.

LOAD DATA FROM MASTER;

bila berhasil maka di slave akan terbuat database repli_db beserta isinya (tabel dan datanya).

6. sekarang setting replikasinya (masih di console)

SLAVE STOP;

CHANGE MASTER TO MASTER_HOST=’192.168.10.91′,
MASTER_USER=’slave_user’,
MASTER_PASSWORD=’pass’,
MASTER_LOG_FILE=’
mysql-bin.000119,
MASTER_LOG_POS=
268;

SLAVE START;


isi dari parameter MASTER_LOG, MASTER_LOG_FILE, MASTER_LOG_POS mengambil dari status master dari mesin/komputer master.

oke... konfigurasi di slave sudah selesai, dan seharusnya semua berjalan lancar....

untuk melihat status slave bisa menggunakn perintah

SHOW SLAVE STATUS;


nb:

spesifikasi komputer/mesin master yang digunakan :

  1. operating system Linux Ubuntu 8.10 (Intrepid)
  2. MySQL versi 5.1.22
spesifikasi komputer/mesin slave yang digunakan:

  1. operating system Linux Ubuntu 8.04 (HardyHeron)
  2. MySQL versi 5.0.51

42 comments:

  1. kalo master nya suse 10.1 dan slave nya ubuntu 8.04 bisa gk ya,..mohon ksih penjelasan nya ya pak,.thx

    ReplyDelete
  2. rekomendasi nya os untuk master dan slave di rekomendasi-kan sama....

    tp kalau di coba bisa... asalkan versi mysql di master harus lebih baru atau sama dari slave

    ReplyDelete
    Replies
    1. cek, benarkah masternya yg lebih baru, bukannya slave yg versinya hrus lebih baru krna slave bakal mengkitu versi dari master

      Delete
  3. kalau di master nya ada proses "transaction", akan berpengaruh nggak ke slave nya?

    ReplyDelete
  4. blok transaksi akan melakukan commit bila saat proses di dalam blok transaksi tersebut tidak terjadi error...

    sedangkan SLAVE hanya mengejar/menyamakan dengan yg ada di MASTER...

    jadi walaupun MASTER pk transaction atau kagak... ngak masalah bwt SLAVE

    ReplyDelete
  5. itu cuma bisa d u buntu doank..?
    klo d windows gmn..?
    apakah sama syntax2 na..?

    ReplyDelete
  6. pake windows cofiguration mysqlnya sama aja dengan yang di ubuntu kok.

    ReplyDelete
  7. salam kenal mas ... mas klo di mysql ada tipe replikasi mastersite ga mas?... artinya semua posisi sama tuh mas.... gak ada table master or slave... semuanya posisinya sama....

    ReplyDelete
  8. mungki clustering bisa membantu seperti yang ada dilink dibawah ini

    http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-multi-master.html

    ReplyDelete
  9. artikel nya bagus ..

    numpang tanya nih, bisakah membuat replikasi dengan lebih dari satu master ? ..

    contoh : ada 2 server master yang mereplikasi ke satu server slave.

    terima kasih.

    fandi/fkun9@yahoo.com

    ReplyDelete
  10. setahu saya klw 2 master langusng ke 1 slave tidak bisa/belum bisa dilakukan oleh mysql.

    tetapi bila skema nya menjadi.
    co-master to 1 slave bisa dilakukan..

    seperti yang tulis oleh Patrick Galbrait di
    http://capttofu.livejournal.com/1752.html?view=157144#t157144

    ReplyDelete
  11. kalo lebih dari satu database gmn ya cara nya mas,.mohon pencerahan nya,. saya coba slave nya pake windows

    ReplyDelete
  12. pada my.cnf pada master tuliskan nama-nama databasenya seperti dibawah ini :

    binlog-do-db=db_1
    binlog-do-db=db_2
    binlog-do-db=db_3

    kemudian pada my.cnf slave tuliskan seperti ini :
    replicate-do-db=db_1
    replicate-do-db=db_2
    replicate-do-db=db_3

    lengkapnya bisa liat di posting ini : http://gnusys.net/kb/index.php/2009/06/mysql-master-slave-replication-of-multiple-databases/

    ReplyDelete
  13. mas mau tanya kalau mau update database dari lokal ke server dapatkah menggunakan teknik replikasi multimaster ini?? lalu apakah teknik multi master ini dapat digunakan untuk aplikasi toko online? thx mas

    ReplyDelete
  14. bisa mas.. dan multimaster ini adalah update dua arah mas... untuk kasus toko online bisa juga di implementasikan...

    ReplyDelete
  15. saya sedang skripsi, rencana saya mau membuat sinkronisasi database.. sinkronisasi ini dilakukan supaya pekerjaan tidak dilakukan 2x, misal saya update database lokal, maka database server akan terupdate juga.. kira2 bagaimana membuatnya yah mas? lalu implementasinya pada bidang apa?? hehehehe.. maaf mas merepotka.. mohon pencerahannya..

    ReplyDelete
  16. untuk singkronisasi dua arah setting dan skema-nya seperti yang di tulis di http://capttofu.livejournal.com/1752.html?view=157144#t157144,

    implementasinya dpat dilakukan berbagai macam bidang, yang severnya tersebar, seperti data transaksi penjualan di kantor cabang yang kemudian di singkrokan ke kantor pusat,

    ReplyDelete
  17. wah saya baca mtulisan di atas.. sama saya sedang mengalami kesulitan, jika saya mempunyai sebuah toko online.. mis komputer.. jika saya ingin update harga komputer melalui local host bagaimana caranya ya?? kalo replikasi kan untuk back up??

    ReplyDelete
  18. kalo sistem operasinya pake windows xp sp 2 gimana mas.... please

    ReplyDelete
  19. pake windowx XP sepertinya bisa dan cara konfugiruasi pada mysql-nya sama saja... Apbila master-nya menggunakan window xp maka untuk slave sebaiknya windows xp juga..

    ReplyDelete
  20. om dendie saya sudah mencoba seperti cara yg diatas ... cuma saya menggunakan windows xp, muncul error seperti ini untuk server masternya :


    Slave I/O thread: connected to master 'root@10.2.5.85:3306',replication started in log 'mysql-log.000006' at position 268

    Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it). Error_code: 1593

    Slave I/O thread exiting, read up to log 'mysql-log.000006', position 268

    udah cari2x di mbah google belum ada penyelesaiannya om ... mohon bantuannya yah . . .

    ReplyDelete
  21. kalo diliat dari keterangan diatas berarti server id nya bentrok kan yah? tapi saya udah bedain antara server id master dengan server id slave seperti contoh yg om dendie berikan ... tapi keterangan errornya seperti itu apa itu bug yah di windows ?

    ReplyDelete
  22. coba di cek dulu sever id di masing-masing mysql server nya untuk memeriksa apakah sudah sama dengan konfigurasi telah diset atau belum, caranya adalah masuk ke consol mysql kemudian ketikan perintah SHOW VARIABLES LIKE 'server_id';

    ReplyDelete
  23. thanks mas atas infonya, sudah saya coba berhasil

    ReplyDelete
  24. mas saya sudah lakukan spt langkah diatas, saat melakukan perintah di slavenya yaitu LOAD DATA FROM MASTER;
    keluar error
    ERROR 1218 (08S01): Error connecting to master: Master is not configured

    padahal sudah saya konfigurasikan di master maupun slave.

    mohon pencerahannya

    ReplyDelete
  25. mungkin koneksi ke database master nya terputus.. coba periksa koneksinya.
    1. pada console ketik "ping [alamat ip mysql master]"
    2. pada console ketikan mysql -u[username] -p[password] -h[alamat ip mysql master]

    ReplyDelete
  26. Saya menggunakan replication untuk 3 komputer. dengan system kerja masing-masing komputer sebagai master sekaligus slave.
    Gambarannya :
    A ambil data di B, B Ambil data di C, C ambil data di A.

    Masalahnya adalah, saat saya edit :
    - di A, C berubah tapi B tidak berubah.
    - di B, A berubah tapi C tidak berubah,
    - di C, B berubah tapi A tidak berubah.

    Mohon bantuan informasinya ...

    ReplyDelete
  27. Replikasi pada proses nya adalah menyamakan kondisi binlog slave dengan yang ada pada master.

    Dan salah tujuan dari replikasi adalah untuk backup data dan pada slave hanya diperuntukan proses read saja.

    apabila aristektur nya seperti diatas maka hal tersebut menjadi tidak jelas antar yang berperan sebagai master dan yang berperan sebagai slave.

    Untuk kebutuhan seperti diatas, maka yang diperlukan adalah mysql clustering. seperti yang ditunjukan pada link dibawah ini.

    http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-replication-multi-master.html

    ReplyDelete
  28. mas, mw tanya? klw contoh cara koneksi antar 2 komputer tersebut gmn mas....

    minta pencerahannya mas...

    ReplyDelete
  29. contoh cara koneksi 2 komputer ???

    Apakah yang Anda maksud koneksi adalah setting 2 buah komputer di LAN (Local Area Network). betul begitu ya...

    sepertinya link ini bisa membantu http://www.webtkj.co.cc/2011/03/teknik-konfigurasi-lan-di-windows.html

    ReplyDelete
  30. pagi mas dendie.
    saya punya server pulsa yg harus hidup 24jam non stop. dan saya membuat replikasi untuk web reportnya.
    yg mau saya tanyakan,
    kata si programernya, kompt replikator harus hidup juga. dan seandainya kompt tersebut mati/restart/tidak berfungsi,maka harus membuat replikasi lagi. apa benar begitu,mas?
    trims.

    ReplyDelete
  31. pagi juga mas.. idealnya memang komputer replicator nya harus hidup, karena proses komputer replikasi selalu mengejar perubahan yang terjadi pada komputer master berdasarkan log binary komputer master. Klw komputer replicator nya mati/restart ya tidak apa-apa dan komputer replicator akan mengerjar kembali ke tertinggalannya. mungkin yang menyebabkan tidak berfungsi karena konfigurasi replikasi nya hilang ketika terjadi restart pada komputer replikatornya.

    ReplyDelete
  32. sore mas dendie. trims atas pencerahannya....
    berarti intinya tidak apa-apa bila kompt replikasi mati,bukan?
    trims.salam kenal

    ReplyDelete
  33. iya betul... salam kenal kembali :)

    ReplyDelete
  34. artikel yang bagus.. xixixi... kalo komputrer master mati.. terus kuganti ip slave.. jadi database replika slave ku pakai.. jadi langsung bisa jadi master tidak ya mas... jadi tinggal ganti ip database gitu.. terus setelah komputer master hidup gimana nyamain database yang ada di slave... janga katakan manual yap.. xixi makasih.

    ReplyDelete
    Replies
    1. Tujuan dari membuat master dan slave adalah untuk melakukan backup data secara realtime.

      Dan slave hanya digunakan untuk proses read data saja.

      Jadi apabila menginginkan setiap node adalah bisa melakukan read dan write kemudian melakukan singkorniasi setiap node secara otomatis, maka teknologi yang dapat digunakan adalah bukan MySQL Replikasi Database tetapi dapat menggunakan MySQL Clustering.

      Delete
  35. This comment has been removed by the author.

    ReplyDelete
  36. Kalo replikasi multi master menggunakan mysql pada windows bisa bagi infonya?
    Lebih spesifik kalo bleh msi awam soalnya
    Hehe

    ReplyDelete
  37. mas replikasi 2 arah 3 server bisa gk?

    ReplyDelete
  38. yang 3 arah ada gan replikasi mysql mariaDB

    ReplyDelete
  39. mas, kalo konfigurasi master-master butuh auto_increment gak sih? makasih

    ReplyDelete
  40. 1 master 2 slave gimana gan, bisa gak...!

    ReplyDelete