Ramdhani’s Blog

Catatan kecil pengalaman, pemikiran dan proses pembelajaran …

Replikasi Database di MySQL

with 5 comments

replikasi database

Tulisan ini merupakan dokumentasi sekaligus sebagai reminder  saya dalam melakukan set up replikasi database di MySQL. Sebenarnya set up untuk model replikasi Master-Slave ini ngga terlalu rumit kok. Replikasi pada MySQL memungkinkan kita untuk memiliki copy database dari server utama (master) ke server lainnya/cadangan (slave), dan semua update/perubahan yang terjadi pada server utama akan otomatis secara langsung di replikasi pada server slave. Replikasi berguna jika terjadi kerusakan pada server utama maka effort untuk segera membuat server kembali Up lebih minimal sambil menunggu server utama di perbaiki.

Pada kasus  ini saya melakukan replikasi pada 2 buah server yang di dalamnya terinstall OpenSuse. Server Utama adalah IBM Power PC Intellistation 185 dengan OS Linux Open Suse 11 (for Power PC) dan Server kedua adalah HP ML 350 G4 dengan OS Linux Open Suse 10.2. Secara umum konfigurasinya hampir sama dengan distro lainnya, hanya perbedaan di path saja saya pikir. OK lets get it on.

1. Konfigurasi Master

Pertama kita edit file /etc/my.cnf pada file ini kita definisikan file log yang berfungsi oleh slave untuk melihat apa yang telah berubah pada master dan kita juga harus mendefinisikan bahwa MySQL pada sever utama ini adalah master. Dan kita juga ingin mereplikasi database dengan nama misalnya ehrdatabase maka kita harus menambahkannya ke file /etc/my.cnf

log-bin = /var/log/mysql/mysql-bin.log

binlog-do-db=exampledb

server-id=1

lalu kita restart Mysql

/etc/init.d/mysql restart

Lalu kita log in ke MySQL sebagai root dan membuat user dengan kewenangan melakukan replikasi.

mysql -u root -p
Enter password:

Sekarang kita dalam MySQL shell.

GRANT REPLICATION SLAVE ON *.* TO ’slave_user’@’%’ IDENTIFIED BY ‘<some_password>’; (ganti<some_password> dengan password kita!)
FLUSH PRIVILEGES;

Berikutnya (masih pada shell MySQL) beri perintah:

USE exampledb;
FLUSH TABLES WITH READ LOCK;

SHOW MASTER STATUS;

Perintah terakhir akan menampilkan seperti berikut :

+—————+———-+————–+——————+

| File          | Position | Binlog_do_db | Binlog_ignore_db |

+—————+———-+————–+——————+

| mysql-bin.006 | 183      | ehrdatabase  |                  |

+—————+———-+————–+——————+

1 row in set (0.00 sec)

Catat konfigurasi diatas karena akan digunakan saat mengkonfigurasi server slave. S

kemudian keluar dari shell MySQL :

quit;

Kaena kita ingin melakukan replikasi maka pada slave juga harus memiliki database yang sama seperti pada master, maka dari itu kita dump dulu database yang ada pada master, dengan perintah :

mysqldump -u root -p<password> –opt ehrdatabase > ehrdatabase.sql

Sekarang konfigurasi master telah selesai. Sekarang set up slave ..

2. Konfigurasi Slave

Pada slave pertama kali kita buat database dulu dengan nama yang sama ehrdatabase:

mysql -u root -p
Enter password:
CREATE DATABASE ehrdatabase;
quit;

Kemudian kita import/restore kembali data yang telah kita backup dari master pada slave:

mysql -u root -p<password> ehrdatabase < ehrdatabase.sql

Sekarang kita harus Memberitahu MySQL yang ada pada slave, bahwa alamat IP server master adalah 192.168.1.100 , dan database yang akan di replikasi adalah ehrdatabase, dan database yang akan direplikasi adalah ehrdatabase. Maka dari itu kita tambahkan beberapa baris pada /etc/mysql/my.cnf:

server-id=2

master-host=192.168.1.100

master-user=slave_user

master-password=secret

master-connect-retry=60

replicate-do-db=ehrdatabase

Lalu kita restart MySQL:

/etc/init.d/mysql restart

Terakhir , kita harus melakukan ini :

mysql -u root -p
Enter password:
SLAVE STOP;

Pada perintah berikutnya (masih on the MySQL shell) kita harus menyesuaikannya sesuai data yang ada:

CHANGE MASTER TO MASTER_HOST=’192.168.1.100′, MASTER_USER=’slave_user’, MASTER_PASSWORD=’<some_password>‘, MASTER_LOG_FILE=’mysql-bin.006′, MASTER_LOG_POS=183;

  • MASTER_HOST is the IP address or hostname of the master (in this example it is 192.168.0.100).
  • MASTER_USER is the user we granted replication privileges on the master.
  • MASTER_PASSWORD is the password of MASTER_USER on the master.
  • MASTER_LOG_FILE is the file MySQL gave back when you ran SHOW MASTER STATUS; on the master.
  • MASTER_LOG_POS is the position MySQL gave back when you ran SHOW MASTER STATUS; on the master.

Lalu beri perintah (masih pada shell MySQL) :

START SLAVE;

Begitulah simple bukan,sekarang kapanpun ehrdatabase terupdate di master, semua perubahan akan di replikasi ke database ehrdatabase pada slave. Saatnya di tes.

(pada shell MySQL) :

SHOW SLAVE STATUS\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.100

Master_User: slave_user

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: MASTERMYSQL01-bin.000009

Read_Master_Log_Pos: 4

Relay_Log_File: MASTERMYSQL02-relay-bin.000015

Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: ehrdatabase
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187

Untuk melihat jalan tidaknya proses replikasi Parameter Slave_IO_Running and   Slave_SQL_Running: harus YES.

Ok Selesai.

Written by Ramdhani

Desember 21, 2008 pada 1:09 pm

5 Tanggapan

Subscribe to comments with RSS.

  1. HP ML 350 G4 dijadikan slave database .. ck ck mewah. Kita yg di Salemba HP ML 110 msh jd primary ..:)

    mutamakin

    Desember 23, 2008 at 5:01 pm

  2. kemaren aq nyoba, tapi koq sewaktu ngasih perintah show master status hasilnya Empty Set… Kenapa ya… Tolong dong…

    amri

    Januari 5, 2009 at 9:27 am

  3. @ mutamakin : yah daripada mubazir mas hehe
    @amri : coba di cek ulang konfigurasi my.cnf nya apakah sudah bener

    Ramdhani

    Januari 8, 2009 at 12:36 pm

  4. makasih tutorialnya bermanfaat sekali, tapi ada koreksi dikit
    perintah ini seharusnya

    USE exampledb;
    FLUSH TABLES WITH READ LOCK;

    SHOW MASTER STATUS;

    yg betul:
    USE ehrdatabase ;
    FLUSH TABLES WITH READ LOCK;

    SHOW MASTER STATUS;

    firman

    Desember 1, 2009 at 1:54 am

  5. mas kao konfigurasinya di windows gimana????
    plesss….

    aji

    November 6, 2010 at 10:10 am


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: