ide ini sudah muncul sedari lama, namun saya baru bisa mengeksekusi akhir-akhir ini. awal munculnya ide ini karena ada kebutuhan dan permasalahan yang dihadapi oleh client dimana saya sebagai konsultannya.
awal permasalahannya adalah client tidak memiliki sistem backup sama sekali. untuk tindakan urgensi, saat itu saya membuatkan system backup yang berjalan setiap jam tertentu. namun, system backupnya hanya berbentuk dump dengan file ekstensi .sql. langkah ini saya tawarkan karena kebutuhan mendesak dan harus segera dieksekusi untuk melindungi data dari kegagalan fungsi sebuah system.
system backup yang berbentuk file hasil dump tersebut saya kirim dari server production ke server backup dengan tujuan jika ada kegagalan fungsi pada server production, mereka masih memiliki data hasil backup terjadwal.
sejauh ini, metode diatas sangat bermanfaat, terbukti beberapa kali server production mengalami gagal fungsi, antara lain: disk crash, network fail, system error dll, untuk mengembalikan system agar berjalan kembali, tentunya di restore dari file hasil backup tersebut.
namun, permasalahan berikutnya pasti akan muncul. tentunya ini berdasarkan tuntutan ya, jika client tidak nuntut, harusnya masih nyaman-nyaman saja dengan metode diatas. yang ada dalam benak saya beberapa waktu lalu, bagaimana jika client menuntut untuk data backup itu realtime,? artinya, jika data di input, misalnya huruf A pada server production, data huruf A tersebut juga langsung berada pada server backup secara realtime? tentunya metode backup terjadwal bukan lagi jawaban atas masalah ini.
mysql database master-slave adalah solusinya. dengan konfigurasi ini, maka data akan dikirim secara realtime dengan jeda data loss sangat kecil, ya sekian detiklah. ini tergantung dari kecepatan Network antara database master yang mengirim ke database slave, selain network, kecepatan menulis dan membaca pada disk atau yang dalam bahasa IT nya IOPS juga sangat berpengaruh.
untuk melakukan konfigurasi tersebut, gampang-gampang susah, jika anda hoki, mungkin mengikuti tutorial yang bertebaran di internet, bisa langsung implementasi. tapi saran dari saya, sebaiknya anda khatam dulu tentang Server dasar, kemudian khatam database enginer. kemudian memperkaya jam terbang dengan menyelesaikan berbagai persoalan hidup server. dengan begitu, anda akan paham dengan apa yang anda ketik, yang anda lalukan diserver. jadi kemungkinan salah eksekusi sangat tipis. jika anda tidak memahami itu, bisa saja anda salah eksekusi, misalnya menghapus database, atau mengubah privileges dari user server, seperti yang sering saya temui.
gambar diatas adalah salah satu perintah fatal yang dilakukan didalam server yang saya temui.
oke, kita langsung saja masuk ya ke teknisnya, sekarang saya memiliki dua server, yang pertama adalah master, dan yang kedua adalah slave. inti dari replikasi ini adalah bagaimana server slave dapat membaca binary log dari server master. maka, konfigurasi awal adalah pada server master
konfigurasi pada server master.
edit file berikut dan masukkan konfigruasi atau sesuaikan
[root@Master ~]# vim /etc/my.cnf [mysqld] log-bin=/data/bin/mysql-bin binlog-format=row server-id=1
2. membuat direktory binary log
[root@Master ~]# mkdir /data/bin [root@Master ~]# chown -R mysql:mysql /data/bin
3. restart service mysql
[root@Master ~]# systemctl restart mysql
4. lihat hasil konfigurasi dengan perintah
[root@Master ~]# mysql -e "SHOW MASTER LOGS;" +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 26753 | +------------------+-----------+
5. membuat user mysql untuk melakukan replikasi
"GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'IP SERVER SLAVE' IDENTIFIED BY 'DISIPASSWD';"
Konfigurasi pada server slave.
- tambahkan atau modifikasi file berikut
[root@Slave ~]# vim /etc/my.cnf [mysqld] read-only server-id=2
2. restart service mysql
[root@Slave ~]# systemctl restart mysql
3. menambahkan konfigurasi pada mysql
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='IP MASTER', MASTER_USER='repluser', MASTER_PASSWORD='PASSWDYGTADI', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=26753; MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS\G
jika konfigurasi berhasil, harusnya akan muncul tampilan seperti dibawah ini.
sampai disini, tujuan sudah tercapai, yaitu mysql database replikasi searah secara realtime. disini perlu adanya monitoring dan throubleshooting jika ada error pada system replikasi. selain monitoring dan throubleshooting, diperlukan juga tunning database untuk performa lebih baik.
Saya Riyanto, seorang Sysadmin. familiar dengan linux server dan Open source. jika butuh dukungan, bisa hubungi saya pada surel riyanto1337@gmail.com