konfigurasi mysql database master-slave untuk replikasi searah

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.

Screenshot_18

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.

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

Screenshot_8

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

Bagikan saja, itu tidak berat

Membangun data Ware House yang aman

Halo, kebetulan saat ini saya sedang membangun sebuah data Ware House.

apa itu data ware house ? yaitu sekumpulan database dari bermacam aplikasi yang di kumpulkan dalam satu server.

tujuan adalah untuk melakukan pengolahan data yang sumber datanya di ambil dari bermacam aplikasi tersebut. besar dong ? tentu, namanya juga ware house = gudang data.

kenapa tidak dilakukan pengolahan langsung di aplikasinya ? -sudah, tapi terkadang ada kebutuhan khusus diluar dari aplikasi. karena untuk melakukan perubahan di Production aplikasi sangat tidak di sarankan. SANGAT TIDAKKKKKKKK. JANGAN, TIDAK BOLEH. TITIK.

caranya bagaimana, ? logikanya simple, implementasinya yang gak simple wkwkwkwk

bahan-bahan yang di butuhkan :

1. server Production Aplikasi

2. server backup

3. server data ware house

tahapannya adalah :

{SERVER PRODUCTION}

  1. melakukan backup rutin pada server aplikasi production, caranya : http://mandrivaputri.info/2019/07/membuat-auto-backup-database-server-mariadb/

hal diatas dilakukan di semua server aplikasi yang ingin ditarik databasenya. oh ya, tutorial diatas adalah server dengan database mysql. jika databasenya berbeda, postgre misalnya, lakukan backup dengan cara yang ada di gugel, gampang, asalkan mau.

{SERVER BACKUP}

2. menarik ( get ) database hasil backup di server aplikasi production ke server backup, ini pakai rsync. contohnya seperti ini :

rsync -rzhav –update -e ‘ssh -p 220’ root@192.168.10.3:/home/centos/backupdb/ /data/192.168.10.3/db/

script diatas adalah contoh. jalankan ini di server backup, jalankan di cronjob secara rutin pakai bash script. cara nya cari di google, banyak.

kemudian, mengirim file hasil tarikan di server backup ke server Data ware house.

Screenshot_71

oh iya, siapa bilang sysadmin itu gak perlu ngerti programming. sysadmin harus ngerti programming, komunikasi antar mesin, itu perlu programming, bahasa pemograman yang sering digunakan untuk mesin adalah Python dan Shell Script. diatas adalah sedikit contoh bahasa pemograman shell script dengan bash command.

soalnya saya nyari-nyari di google gak nemu, akhirnya saya bongkar kitab lama saya. hahaha

saya jabarkan code diatas :

untuk i , temukan file yang modifikasi waktunya -1 hari di dalam folder /data/192.168.10.3/db

lalu

kirim data yang di temukan tersebut ke user root yang berada di server 192.168.11.4 di folder /root/db

selesai

{SERVER DATA WARE HOUSE}

setelah server Data ware house menerima kiriman backup database server Production dari server Backup, server Data Ware House bertugas untuk melakukan import database kiriman itu ke database server di Server Data Ware House. bingung ? ngopi dulu gih~~

saya membuat sebuah bash script yang saya jalankan secara rutin. oiya, timing waktu sangat penting, antara :

-server production melakukan backup internal

-server backup menarik data dari server production

-server backup mengirim data ke server data ware house

-server data ware house melakukan import database

timing waktu harus di perhatikan agar tidak miskom. hehehe

begini scriptnya :

Screenshot_72

penjabaran :

baris pertama : melakukan penghapusan database

baris kedua : membuat database baru

baris ketiga : untuk i , temukan file yang modifikasi waktunya -1 hari di dalam folder /root/xxx

baris ke empat : maka

baris ke lima : import file database hasil backupan di folder i ke database server

baris ke enam : selesai

baris ke tujuh : masuk ke folder /root/xxx

baris ke delapan : hapus semua file di folder tsb.

sampai disini, data ware house sudah selesai di bangun, kamu bebas mengolah data di data ware house tersebut tanpa harus menyentuh database aplikasi production. lebih aman bukan ?

disini kamu bisa mengolah data dengan melakukan query, terserah, mau pakai PHP, atau pun tools pengolah data seperti tableau.

sistem ini berjalan secara automatic, data di update sesuai dengan data asli di aplikasi production dengan waktu yang di tentukan oleh cronjob.

kamu tinggal bobok manis, biarkan tim pengolah data yang menggunakan layanan ini, kamu paling tinggal troubleshoot tipis-tipis aja kalau ada masalah. 🙂

Bagikan saja, itu tidak berat

Disable akses root pada phpMyAdmin

phpmyadmin

phpmyadmin

jutaan orang tidak menyadari, bahwa root akses dapat membayakan dirinya sendiri..

melakukan disable root, baik itu login maupun akses, itu memang pedih. bagi sebagian orang yang tidak tau, hehe

metode ini disebut-sebut merenggut kenyamanan dari seorang developer, padahal, yang namanya developer, itu kan sebelum live di production, ya dibuatnya di developer. nah, di production, itu memang harus benar-benar di konfigurasi dengan aman, salah satunya dengan disable root login/akses. jadi kalau production, jangankan root akses, phpmyadmin juga pasti tidak ada, port database juga tidak ada. ya pokoknya seperti itulah, hehehe,

mudah-mudahan kalian mengerti, karena saya tidak sedang berhasrat menulis saat ini. 😀

studi kasusnya linux ubuntu 16

pertama, edit file konfigurasi :

vi /etc/phpmyadmin/config.inc.php

allowroot

allowroot

temukan kata-kata tersebut dalam file yang di edit, pastikan valuenya FALSE

jika belum ada, bisa ditambahkan sendiri

$cfg[‘Servers’][$i][‘AllowRoot’] =FALSE;

kemudian save, dan restart web servernya.

systemctl restart apache2

 

Bagikan saja, itu tidak berat