Published by Kalpin Erlangga Silaen on 19 Dec 2008 at 12:54 pm
Tutorial Replikasi MySQL
Tutorial kali ini adalah mengenai pembuatan replikasi Master-Slave untuk database MySQL. Adapun yang dimaksud dengan Master-Slave adalah sebuah konsep dimana salah satu server MySQL bertindak sebagai Master (database yang selalu terupdate) dan Slave adalah server MySQL satunya yang bertindak melakukan replikasi dari data yang masuk ke database Master tersebut. Dengan kata lain, bahwa replikasi ini adalah replikasi One-way. Perlu saya ingatkan bahwa metoda ini tidak menjamin data Anda aman dan bukan juga bukan solusi MySQL Backup yang dianjurkan karena jika ada data rusak masuk via MySQL Master maka data di server MySQL Slave pun akan ikut rusak. Berikut cara melakukan replikasi Master-Slave untuk MySQL
Dalam tutorial berikut, saya berasumsi bahwa Anda login sebagai root dan bekerja di direktori /root
(di server MySQL Master dan Slave) serta menggunakan variable-variable berikut:
- IP_MASTER : IP MySQL Master
- IP_SLAVE : IP MySQL Slave
- kalpindb : Nama database yang hendak direplikasi
- [passworddbroot] : password database untuk akses root
1. Di sisi MySQL Master, cek apakah koneksi ke port 3306 (MySQL) dari IP_SLAVE diijinkan
#/sbin/iptables -I INPUT -p[passworddbroot] TCP –dport 3306 -s IP_SLAVE -j ACCEPT
2. Di sisi MySQL Master, tambahkan 1 user khusus untuk replikasi
# mysql -u root -p[passworddbroot]
mysql> grant replication slave on *.* TO replikasi@”IP_SLAVE” identified by ‘passwordAnda’;
mysql> quit
Ganti ‘passwordAnda’ dengan password pilihan Anda.
3. Masih di sisi MySQL Master, buka file /etc/my.cnf:
#vi /etc/my.cnf
dan tambahkan isian berikut ke bagian [mysqld]:
log-bin=/var/lib/mysql/mysql-bin.log
server-id=1
binlog-ignore-db=”mysql”
Perintah diatas akan menginformasikan bahwa MySQL Master memiliki ID 1, log dalam format binary ke file /var/lib/mysql/mysql-bin.log dan meminta supaya MySQL Slave mengabaikan melakukan replikasi database mysql.
Lalu restart mysql server Anda yang di Master:
#service mysqld restart
atau
#service mysql restart
atau
sesuaikan dengan script startup mysql Anda.
4. Lakukan backup database di Master yang hendak Anda replikasi, supaya bisa direstore ke server slave sebelum dilakukan replikasi
# mysql -u root -p[passworddbroot] kalpindb > kalpindb.sql
Copy file kalpindb.sql ke server slave
# scp kalpindb.sql IP_SLAVE:/root
5. Check status MySQL Master Anda
# mysql -u root -p[passworddbroot]
mysql> SHOW MASTER STATUS;
Anda akan melihat hasil seperti berikut:
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000155 | 225505 | kalpindb | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
Harap catat nama file (mysql-bin.00155) serta posisi (225505) yang saat ini sedang aktif di MySQL Master Anda.
Kita masuk ke server MySQL Slave dan melakukan konfigurasi supaya melakukan replikasi ke MySQL Master
1. Buka file /etc/my.cnf
#vi /etc/my.cnf
dan tambahkan baris-baris berikut dibagian [mysqld]
server-id=2
master-host = IP_MASTER
master-user = replikasi
master-password = passwordAnda
master-port = 3306
Sesuaikan variable diatas dengan langkah dibagian Master
2. Lakukan restore database yang kita backup dari MySQL Master
# mysql -u root -p[passworddbroot]
mysql> create database kalpindb;
mysql> quit
# mysql -u root -p[passworddbroot] kalpindb < kalpindb.sql
3. Restart MySQL service Anda
#service mysqld restart
atau
#service mysql restart
atau
sesuaikan dengan script startup mysql Anda.
4. Check status di MySQL Slave
# mysql -u root -p[passworddbroot]
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_LOG_FILE=’[mysql-bin.000155]‘,MASTER_LOG_POS=[225505];
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
Perintah diatas akan menghentikan sementara status slave di MySQL Slave, kemudian melakukan perubahan nama file dan posisi aktif di MySQL Master sebelum replikasi
Perintah berikutnya adalah mengaktifkan status SLAVE dan melakukan pengecekan status server SLAVE. Dari hasil pengecekan tersebut maka harus dipenuhi hal-hal berikut
– Slave_IO_State: Waiting for master to send event <=== Harus ada, kalau tidak ada baris ini artinya replikasi masih belum berjalan.
Contoh output dari server MySQL Slave saya:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: xxx.xxx.xxx.xxx
Master_User: replikasi
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000155
Read_Master_Log_Pos: 233408
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 171568
Relay_Master_Log_File: mysql-bin.000155
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_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: 233408
Relay_Log_Space: 171568
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: 0
1 row in set (0.00 sec)
Dengan demikian, replikasi sudah berjalan dengan baik. Dan kembali, saya ingatkan Anda bahwa sistem replikasi Master-Slave ini tidak menjamin keamanan data Anda.
Sebaiknya Anda, melakukan backup berkala terhadap database yang ada di server MySQL Master Anda, ke tape drive atau server lainnya.
Catatan: Anda bisa melakukan replikasi banyak database sekaligus, cukup mengulangi langkah backup database yang diinginkan di MySQL Master dan direstore ke MySQL Slave.
Semoga bermanfaat.
Sangar on 09 Jan 2009 at 8:37 am #
om kalpin aku boleh minta spoof pribadi ndak om??
DzenT on 09 Jan 2009 at 10:59 pm #
ewh. tengkiyu om inpona.
SkiN on 31 Jan 2009 at 8:02 am #
Prinsip nya kayak HD SCSI ya oms kalpin ya ..
Patut di coba`
fajar on 01 Jul 2009 at 1:17 pm #
klo master to master bisa gak???
Kalpin: Bisa om, sayangnya saya lagi ada kesibukan tersendiri jadi belum sempat nulis. Mudah-mudahan dalam waktu dekat ya.
CO_NGGAK_LAKU on 16 Jul 2009 at 1:07 pm #
Wah,makasih boz Kalpin..sangat membantu bagi gw yg msh newbie.
Oia,gw sll menunggu dibukanya kembali request spoof di Allnetwork