Replikasi database adalah seperangkat teknologi yang digunakan untuk menyalin dan mendistribusikan data dari satu database ke database yang lain. Dan selanjutnya, mensinkronisasikan antar database untuk menjaga konsistensi. Dengan replikasi, data dapat didistribusikan ke lokasi yang berbeda dan pengguna yang jauh melalui jaringan LAN, WAN, Dial-up Connection, wireless connections, dan internet.
Keuntungan menggunakan Replikasi database:
- Menghindari kemungkinan tidak semua data ter-backup karena saat proses backup data manual dilakukan bisa saja terjadi perubahan data oleh client.
- Apabila server master mengalami kerusakan, database bisa segera dialihkan ke server slave.
- Replikasi master-slave berlangsung secara realtime dimana setiap perubahan pada data server master akan otomatis merubah data pada server slave.
Disini saya menggunakan ubuntu 16.04 sebagai OSnya dan mariadb 10.0.38. Dengan ketentuan sebagai berikut:
Server master = 192.168.60.141
Server Slave = 192.168.60.142
Konfigurasi Server
Master
Buka Konfigurasi Mariadb.
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Menuju baris 29. Ubah bind-address ke ip master.
bind-address = 192.168.60.141
Menuju baris 74. Hilangkan tanda pagar pada server-id dan log_bin.
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log
Restart service Mariadb.
systemctl restart mysql
Buat user untuk akses databases replika.
mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.60.142' IDENTIFIED BY 'secret'; FLUSH PRIVILEGES;
Kunci database agar tidak ada perubahan pada saat konfigurasi replikasi
FLUSH TABLES WITH READ LOCK;
Tampilkan status master. File dan Position dibutuhkan pada saat konfigurasi Databases Slave.
MariaDB [(none)]> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 812 | | | +------------------+----------+--------------+------------------+
Slave
Buka Konfigurasi Mariadb.
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Menuju baris 29. Ubah bind-address ke ip slave.
bind-address = 192.168.60.142
Menuju baris 74. Hilangkan tanda pagar pada server-id dan log_bin. Serta ubah server-id nya. Untuk server-id harus berbeda dengan server-id master. Disini saya menggunakan server-id = 2.
server-id = 2 log_bin = /var/log/mysql/mysql-bin.log
Restart service Mariadb.
systemctl restart mysql
Konfigurasi koneksi ke Master.
Masuk ke server slave. Lalu jalankan perintah berikut:
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.60.141', MASTER_USER='replica', MASTER_PASSWORD='secret', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=812;
Jalankan databases slave.
MariaDB [(none)]> start slave;
Masuk ke server master. Lalu buka kembali lock databasesnya.
mysql -u root -p UNLOCK TABLES;
Tampilkan status slave.
MariaDB [(none)]> SHOW SLAVE STATUS \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.60.141 Master_User: replica Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 812 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 535 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: 812 Relay_Log_Space: 833 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_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos:
Uji coba
Buat suatu database di server master, jika berhasil maka database yang baru terbuat di master akan secara otomatis terbuat juga di server slave. Berikut hasil uji cobanya:
Terimakasih telah membaca.
penyebab failed pada saat perintah sudo systemctl rerstart service
Perlu dicek disisi log nya terlebih dahulu, kenapa failednya. Baru bisa dianalisa terkait failednya.