Replikasi MySQL: memisahkan beban baca dan tulis
Kenali konsep dasar primary-replica dan efeknya pada konsistensi data yang dibaca.
Kenapa perlu replikasi
Saat trafik baca jauh lebih besar dari trafik tulis, satu server database bisa kewalahan. Replikasi menyalin data dari server utama (primary) ke satu atau lebih server salinan (replica) yang bisa menangani query baca.
Cara kerja replikasi MySQL
Server primary mencatat setiap perubahan data ke binary log. Server replica membaca binary log tersebut dan menerapkan perubahan yang sama pada datanya sendiri.
# Di server primary, aktifkan binary logging (my.cnf)
[mysqld]
server-id = 1
log_bin = mysql-bin
# Di server replica
[mysqld]
server-id = 2
Mengarahkan query ke server yang tepat
Aplikasi biasanya diarahkan agar operasi tulis (INSERT, UPDATE, DELETE) selalu ke primary, sementara operasi baca (SELECT) bisa diarahkan ke salah satu replica.
// Contoh koneksi Laravel dengan konfigurasi read/write terpisah
'mysql' => [
'read' => ['host' => ['replica1.internal']],
'write' => ['host' => ['primary.internal']],
'sticky' => true,
],
Opsi sticky memastikan permintaan yang baru saja menulis data akan membaca dari primary pada request yang sama, menghindari kondisi seolah data belum tersimpan.
Replication lag
Karena replica menerapkan perubahan secara asinkron, ada jeda waktu (lag) antara data di primary dan replica. Jika aplikasi langsung membaca data yang baru saja ditulisnya dari replica yang belum sinkron, data yang terlihat bisa terasa "hilang" sementara.
Latihan
Cari tahu cara memeriksa nilai Seconds_Behind_Source (atau Seconds_Behind_Master pada versi lama) melalui perintah SHOW REPLICA STATUS, dan diskusikan bagaimana nilai ini memengaruhi keputusan mengarahkan query baca.
