Jumat, 03 April 2009

Replikasi Database dengan MySQL

Dengan menggunakan Fitur Replikasi di MySQL dapat membuat duplikasi database master ke slave secara realtime. Database slave ini juga nantinya dapat digunakan sebagai standby server untuk master jika DB master shutdown (in case: terjadi error di master) dengan melakukan perubahan pada aplikasi supaya merujuk ke DB slave.

Dalam membuat replikasi DB Server ini dapat menggunakan operating system Linux maupun Windows.

Langkah-langkahnya adalah sebagai berikut:

1. Master MySQL Database

Lakukan perubahan pada file konfigurasi mysql yang ada di Server Master. Biasanya nama file : mysql.cnf atau my.cnf yang terletak di /etc/mysql (Sesuai dengan Distro yang digunakan).

Lakukan perubahan atau penambahan seperti baris dibawah ini:

server-id = 1

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

binlog-do-db=database_name_1
binlog-do-db=database_name_2
binlog-do-db=database_name_3

Lalu restart mysql service: /etc/init.d/mysql restart

Kemudian login ke console mysql:

#mysql –u root –p

#enter password:

Pada shell mysql

Mysql> GRANT REPLICATION SLAVE ON *.* TO ’slave_user’@'%' IDENTIFIED BY 'slave2';

Mysql> FLUSH PRIVILEGES;

Mysql> USE nama_db;
Mysql> FLUSH TABLES WITH READ LOCK;

Mysql> SHOW MASTER STATUS;

Hasilnya:

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

| File | Position | Binlog_do_db | Binlog_ignore_db |

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

| mysql-bin.000001 | 98 | nama_db | |

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

1 row in set (0.00 sec)

Hasil diatas yang nantinya digunakan untuk konfigurasi DB slave

2. Lakukan snapshot Database master dan di copy ke Slave server. Hal ini dilakukan supaya DB Master dan Slave memiliki struktur dan data yang sama

Snapshot dapat dilakukan dengan menggunakan utility Mysqldump atau dengan menggunakan snapshot data raw files.

mysqldump -u root -p –opt nama_db > nama_db.sql

atau

shell> tar cf /tmp/db.tar ./data
shell> zip -r /tmp/db.zip ./data
shell> rsync --recursive ./data /tmp/dbdata

3. Slave MySQl database

Pada slave buat database dengan nama yang sama nama_db yang datanya bisa diambil dari hasil snapshot yang dilakukan di step 2.

Dengan asumsi DB slave sudah sama dengan Master, lakukan perubahan pada konfigurasi mysql slave /etc/mysql/my.cnf sperti pada baris dibawah ini:

server-id=2

master-host=ip-master

master-user=slave-user

master-password=password-slave

master-connect-retry=60

replicate-do-db=database_name_1
replicate-do-db=database_name_2
replicate-do-db=database_name_3

kemudian restart MySQL:

/etc/init.d/mysql restart

4. penyesuaian data pada slave jika terjadi update pada master pada saat konfigurasi

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

mysql>CHANGE MASTER TO MASTER_HOST=’ip-master′, mysql> MASTER_USER=’slave_user’, MASTER_PASSWORD=’‘, mysql> MASTER_LOG_FILE=’mysql-bin.0000001′, MASTER_LOG_POS=183;

KETERANGAN :

  • 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.

Mysql> START SLAVE;

Mysql> SHOW SLAVE STATUS\G;

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

Slave_IO_State: Waiting for master to send event

Master_Host: 10.X.X.X

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.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: nama_db
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: