Minggu, 06 Mei 2012

REPLIKASI DATABASE



Replikasi Database di MySQL

(wulan_12111113_TI.B)
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.

Tidak ada komentar:

Posting Komentar