Cara menggunakan master-info 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 Address192.168.10.10Sistem OperasiWindows 7Databasesite

Slave:

IP Address192.168.10.20Sistem OperasiUbuntu 16.04Databasesite

Konfigurasi Master

Membuat Database Master

 

Membuat Database dan Tabel

MySQL

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.0log-bin=mysql-binbinlog_do_db=siteserver-id=1

Note :
Untuk server produksi bind address sebaiknya menggunakan IP Address server.

Buat User Baru Pada Master

 

Buat User Baru MySQL

MySQL

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.

 

Lock Database

MySQL

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 |

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

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

 

Dump Database

MySQL

1

mysqldump -u root -p site > site.sql

 

Izinkan kembali perubahan pada database master. Masuk ke mysql console, jalankan :

 

Unlock Database Mysql

MySQL

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

 

Buat Database Slave

MySQL

1

2

CREATE DATABASE `site`;

EXIT;

 

Import database site yang sebelumnya telah kita dump ke dalam database site pada slave.

 

Import Database

MySQL

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.logbinlog_do_db=siteserver-id=2

 

Mulai ulang service mysql dengan perintah sudo service mysql restart . Kemudian masuk kembali ke mysql console dan jalankan perintah dibawah

 

MySQL

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 :

 

Jalankan Database Slave

MySQL

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: mysqlbin.000001

          Read_Master_Log_Pos: 855

               Relay_Log_File: uservrelaybin.000004

                Relay_Log_Pos: 988

        Relay_Master_Log_File: mysqlbin.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.