Konfigurasi Replikasi Master-Slave MySQL
Replikasi MySQL (MySQL Replication) memungkinkan kita membuat salinan dari database secara realtime dari database master ke slave. Tujuan utama replikasi database adalah untuk melakukan backup dari database master, penggunakan database replikasi sangat bermanfaat jika kita melakukan analisa database, karena kita tidak perlu menyentuh database master secara langsung, sehingga jika terjadi suatu kesalahan tentunya tidak akan mempengaruhi database master.
Disini kita akan membangun replikasi database dengan model Master – Slave. Sistem yang saya gunakan pada tutorial ini adalah :
Master :
IP Address | 192.168.10.10 |
Sistem Operasi | Windows 7 |
Database | site |
Slave:
IP Address | 192.168.10.20 |
Sistem Operasi | Ubuntu 16.04 |
Database | site |
Konfigurasi Master
Membuat Database Master
1
2
3
4
5
6
7
8
9
10
|
CREATE DATABASE `site`;
USE `site`
CREATE TABLE `site`.`user`(
`ID` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(25) NOT NULL,
`email` VARCHAR(25) NOT NULL,
`address` VARCHAR(100) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
|
Konfigurasi MySQL
Kita perlu melakukan beberapa perubahan pada file konfigurasi MySQL my.cnf
seperti berikut:
bind-address | =0.0.0.0 |
log-bin | =mysql-bin |
binlog_do_db | =site |
server-id | =1 |
Note :
Untuk server produksi bind address sebaiknya menggunakan IP Address server.
Buat User Baru Pada Master
1
2
|
GRANT REPLICATION SLAVE ON *.* TO ‘user_slave’@‘%’ IDENTIFIED BY ‘MySlavePassword’;
FLUSH PRIVILEGES;
|
Dump Database
Dump database yang nantinya akan kita import ke database slave, sebelumnya kita harus mengunci database untuk mencegah terjadinya perubahan data untuk sementara.
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql> USE site;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+———————-+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+———————-+———-+————–+——————+
| mysql–bin.000001 | 317 | site | |
+———————-+———-+————–+——————+
1 row in set (0.00 sec)
mysql> QUIT;
|
Simpan informasi diatas untuk konfigurasi pada database slave. Setelah mengunci database selanjutnya dump database.
1
|
mysqldump -u root -p site > site.sql
|
Izinkan kembali perubahan pada database master. Masuk ke mysql console, jalankan :
1
2
3
|
USE site;
UNLOCK TABLES;
QUIT;
|
Untuk konfigurasi pada database master telah selesai, kita lanjutkan konfigurasi pada database slave.
Konfigurasi pada Slave
Buat Database
1
2
|
CREATE DATABASE `site`;
EXIT;
|
Import database site yang sebelumnya telah kita dump ke dalam database site
pada slave.
1
|
mysql -u root -p site < /path/to/site.sql
|
Konfigurasi MySQL pada Slave
Lokasi file konfigurasi mysql bisa berbeda untuk setiap sistem operasi atau versi mysql. Sesuaikan dengan sistem yang kita gunakan. Pada ubuntu 16.04 file konfigurasi mysql terletak di /etc/mysql/my.cnf , sesuaikan konfigurasi seperti dibawah:
log-bin | =/var/log/mysql/mysql-bin.log |
binlog_do_db | =site |
server-id | =2 |
Mulai ulang service mysql dengan perintah sudo service mysql restart . Kemudian masuk kembali ke mysql console dan jalankan perintah dibawah
1
|
CHANGE MASTER TO MASTER_HOST=‘192.168.10.10’,MASTER_USER=‘user_slave’, MASTER_PASSWORD=‘MySlavePassword’, MASTER_LOG_FILE=‘mysql-bin.000001’, MASTER_LOG_POS= 317;
|
Sesuaikan perintah diatas dengan informasi yang kita dapatkan sebelumnya dari perintah SHOW MASTER STATUS
pada database master.
- MASTER_HOST merupakan IP address server master
- MASTER_USER user yang telah kita buat sebelumnya pada database master
- MASTER_PASSWORD password user pada tabel master
- MASTER_LOG_FILE nama file log-bin (dari
SHOW MASTER STATUS
) - MASTER_LOG_POS posisi dimulainya replikasi (dari
SHOW MASTER STATUS
)
Sejauh ini kita telah selesai mengkonfigurasi database master dan slave, jalankan database slave :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
START SLAVE;
SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.10.10
Master_User: user_slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql–bin.000001
Read_Master_Log_Pos: 855
Relay_Log_File: u–serv–relay–bin.000004
Relay_Log_Pos: 988
Relay_Master_Log_File: mysql–bin.000001
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: 855
Relay_Log_Space: 1196
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID:
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
|
Selesai, sekarang coba lakukan proses CRUD pada master. Jika tidak ada kesalahan dan semua tahapan telah dilakukan dengan benar, maka setiap proses CRUD yang terjadi pada database master akan secara otomatis masuk ke database slave.
Posted on: July 7, 2021, by : Julian's | 1,405 views