Pengenalan

Hidup didunia ini pasti akan ada yang namanya bencana, ketika itu terjadi data - data berharga misalnya data perusahaan yang tersimpan di server database sangatlah penting untuk di lindungi. Pada tutorial kali ini kami akan embuat sebuah salinan/cadangan/backup database MariaDB.

Bagaimana cara yang tepat untuk membuat sebuah cadangan/backup sebuah database server MariaDB mariadb secara realtime?

Anda dapat membuat replikasi Master - Slave dimana nantinya setiap melakukan update di sisi server Master maka akan tersinkronisasi ke sisi server Slave dengan kata lain server Slave sebagai cadangan dari server Master.

Jika terjadi bencana ataupun kendala di sisi server Master, maka Anda masih mempunyai cadangan di server Slave yang dapat Anda gunakan kembali.

Prasyarat.

Syarat mengikuti tutorial kali ini Anda mempunyai 2 VM dimana akan dibagi sebagai berikut:

  1. Server Node Master - 192.168.10.19
  2. Server Node Slave - 192.168.10.9

Metode Master - Slave ini salah satu metode replikasi yang hanya terjadi satu arah/hanya ada satu master database dan server yang lain melakukan replikasi pada server master tersebut.

Instalasi Database MariaDB di Node Master dan Slave

Sebelum ke tahap instalasi berikut disini kita sudah menyesuaikan hostname yang digunakan setiap node database dan berikut detail informasinya

Untuk melanjutkan konfigurasi replikasi Master - Slave silakan install terlebih dahulu database MariaDB di sisi node master dan node slave, untuk panduannya dapat mengikuti referensi berikut:

Apabila instalasi database MariaDB sudah dilakukan Anda dapat melakukan verisikasi MariaDB sebagai berikut

Dan untuk versi database antara node master dan slave sama - sama menggunakan MariaDB versi 10.3

Pastikan service database Mariadb masing - masing node sudah running

Konfigurasi My.CNF Di Node Master & Slave

Silakan buka file my.cnf

[[email protected] ~]# vim /etc/my.cnf
[[email protected] ~]#

Menambahkan konfigurasi sebagai berikut:

#
# [client-server]
[mysqld]
bind-address=192.168.10.19
server-id=1
log_bin=mysql-bin
binlog-format=RO

Note: - IP yang diinput merupakan IP dari Node Master

Silakan simpan konfigurasi di atas dan melakukan restart terhadap service MariaDB

[[email protected] ~]# systemctl restart mariadb

Selanjutnya, sama sepertihalnya di node Master silakan buka file my.cnf di sisi node slave.

[[email protected] ~]#
[[email protected] ~]# vim /etc/my.cnf

Menambahkan konfigurasi sebagai berikut:

#
# [client-server]
[mysqld]
bind-address=192.168.10.9
server-id=2
log_bin=mysql-bin
binlog-format=ROW

Note: - IP yang diinput merupakan IP dari Node Slave

Silakan simpan konfigurasi di atas dan melakukan restart terhadap service MariaDB

[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# 

Konfigurasi Replikasi Di Node Master

Silakan login ke database MariaDB Anda menggunakan user root

[[email protected] ~]#
[[email protected] ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+   
| Database           |   
+--------------------+   
| information_schema |   
| mysql              |   
| performance_schema |   
+--------------------+   
3 rows in set (0.001 sec)

MariaDB [(none)]> 

Langkah selanjutnya stop slave disisi node Master

MariaDB [(none)]> stop slave;

Kemudian, user replikasi yang akan digunakan oleh node slave, sebagai berikut

MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'root' @'192.168.10.9' IDENTIFIED BY 'isikan_Password.';     
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.001 sec)

Note: - IP yang diinput merupakan IP node Slave

Setelah itu, cek status node master dengan menjalankan perintah

MariaDB [(none)]>
MariaDB [(none)]> SHOW MASTER STATUS\G
*************************** 1. row ***************************
            File: mysql-bin.000001
        Position: 658
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)

MariaDB [(none)]> exit
Bye
[[email protected] ~]#

Note: - Harap dicatat dengan seksama untuk File dan Position hasil dari status node master, karena akan digunakan nantinya untuk menghubungkan antar node.

Selanjutnya, membuat cadangan node master menggunakan mysqldump, untuk penamanannya bebas sesuai keinginan disini kami berikan nama backupdbmaster.sql

[[email protected] ~]#
[[email protected] ~]# mysqldump --all-database --user=root --password --master-data > backupdbmaster.sql
Info: Using unique option prefix 'all-database' is error-prone and can break in the future. Please use the full 
name 'all-databases' instead.
Enter password:
[[email protected] ~]#

Jika sudah silakan login ke kembali ke node master dan unlock pada tabel, seperti berikut

[[email protected] ~]#
[[email protected] ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 14
Server version: 10.3.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
[[email protected] ~]#

Langkah berikutnya, copy file node master ke node slave bisa menggunakan scp, disini saya menggunakan key untuk akses ke node slave.

[[email protected] ~]#
[[email protected] ~]# scp -i ~/.ssh/id_rsa backupdbmaster.sql [email protected]_VM_Slave:/home/centos
backupdbmaster.sql                                                            100%  468KB  29.6MB/s   00:00    
[[email protected] ~]#

Konfigurasi Replikasi Di Node Slave

Silakan import file node master ke node slave, dan restar service MariaDB

[[email protected] centos]#
[[email protected] centos]# mysql -u root -p < backupdbmaster.sql 
Enter password: 
[[email protected] centos]#
[[email protected] centos]# systemctl restart mariadb
[[email protected] centos]#

Password diatas merupakan password root node slave

Selanjutnya, silakan login ke node slave untuk melakukan konfigurasi replikasi antar node (master & slave)

[[email protected] centos]#
[[email protected] centos]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> stop slave;
Query OK, 0 rows affected, 1 warning (0.000 sec)

MariaDB [(none)]> change master to master_host='192.168.10.19',master_user='root',master_password='Bismillah5758!.',master_log_file='mysql-bin.000001',master_log_pos=658;
Query OK, 0 rows affected (0.013 sec)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> 

Keterangan: - master-host: Isi dengan IP dari node master - master_user: Isi dengan user yang dibuat sebelumnya di node master - master_password: Isi dengan password yang telah dibuat sebelumnya di node master - master_log_file: Isi dengan file log yang didapatkan di status master di node master - master-log_pos: Isi dengan number position yang didapatkan di status master di node master.

Langkah selanjutnya melihat status slave hasilnya akan seperti berikut ini

MariaDB [(none)]>
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************  
                Slave_IO_State: Waiting for master to send event
                   Master_Host: 192.168.10.19
                   Master_User: root
                   Master_Port: 3306
                 Connect_Retry: 60
               Master_Log_File: mysql-bin.000001
           Read_Master_Log_Pos: 658
                Relay_Log_File: mariadb-relay-bin.000002        
                 Relay_Log_Pos: 555
         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: 658
               Relay_Log_Space: 866
               Until_Condition: None
                Until_Log_File:
            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_SSL_Crl:
            Master_SSL_Crlpath:
                    Using_Gtid: No
                   Gtid_IO_Pos:
       Replicate_Do_Domain_Ids:
   Replicate_Ignore_Domain_Ids:
                 Parallel_Mode: conservative
                     SQL_Delay: 0
           SQL_Remaining_Delay: NULL
       Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
              Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
    Slave_Transactional_Groups: 0
1 row in set (0.000 sec)

ERROR: No query specified

MariaDB [(none)]>

ERROR: No query specified error tersebut karena belum ada query disisi node master.

Untuk memastikan apakah replikasi sudah berjalan dengan sempurna, silakan database baru disini kami akan membuat database dengan nama replica_db

Jika dicoba menggunakan phpMyAdmin saat ini replikasi master - slave sudah berjalan dengan normal

Sekian tutorial konfigurasi replikasi MariaDB Master - Slave di CentOS 8.

Selamat mencoba semoga bermanfaat ๐Ÿ‘Œ

See You ๐Ÿ˜ƒ