0

Beberapa statement pada replikasi yang tidak bisa digunakan pada service RDS – cloud AWS

amazon RDS cloud aws

Saat kita migrasi dari MySQL (yang dimanage sendiri) ke server RDS (Relational Database Service) pada cloud AWS, ada beberapa statement pada replikasi/slave yang tidak bisa digunakan. Padahal statement tersebut penting untuk mengkonfigurasi replikasi, mereset replikasi, mensolving replikasi jika terjadi error.

Sebagai gantinya RDS menyediakan statement pengganti dalam bentuk stored procedure yang diawali dengan CALL mysql.x

*Note: disini saya akan menggunakan istilah replikasi atau slave. Kedua artinya sama saja. Semoga tidak bingung.

STOP SLAVE

Statement ini digunakan untuk menghentikan replikasi MySQL. Biasanya statement ini dijalankan ketika ada error pada replikasi, jadi distop dulu replikasinya baru kemudian dilakukan fixing.

Statement ini tidak bisa digunakan di RDS, sebagai gantinya gunakan store procedure berikut:

CALL mysql.rds_stop_replication;

statement replikasi RDS

START SLAVE

Fungsinya untuk menghidupkan replikasi. Biasanya statement ini dijalankan setelah selesai mengkonfigurasi replikasi (CHANGE MASTER TO..), ataupun setelah memfix error pada replikasi. Jadi kita perlu menghidupkan replikasinya kembali.

Gunakan store procedure berikut sebagai ganti dari START SLAVE:

CALL mysql.rds_start_replication

SET GLOBAL sql_slave_skip_counter = <value>

Statement ini digunakan untuk mengskip error pada replikasi. Statement ini cukup mengerikan dan tidak disarankan untuk digunakan jika tidak diperlukan.

Di RDS, kita bisa menjalankannya dengan:

CALL mysql.rds_skip_repl_error


Sedikit sharing.

Pengalaman saya menggunakan statement ini, replikasi yang saya punya menjadi error. Memang awalnya tersolved, tapi beberapa saat kemudian error kembali. Error yang mau saya solve saat itu adalah duplicate primary key.

Saat itu saya menjalankannya dengan value yang lumayan besar:

SET GLOBAL sql_slave_skip_counter = 1000

Ternyata value 1000 itu artinya akan menskip 1000 statement yang ada dibinlog. Statementnya bisa berupa INSERT, UPDATE, DELETE, ALTER dan lain-lain. Dan transaksi pada master saat itu sedang kencang-kencangnya, artinya statement pada binlog tersebut sedang banyak-banyaknya.

Sialnya, dari 1000 statement yang diskip ada statement INSERT. Artinya INSERT tersebut terskip dan datanya tidak masuk ke database replikasi/slave. Beberapa saat kemudian data tersebut ada update di master, dan ketika dijalankan di slave (UPDATE nama_table..xx) menghasilkan error: record not found (karena data dislave tidak ada, sedangkan dimaster ada).

So, buat yang ingin menjalankan sql_slave_skip_counter, jangan isi valuenya dengan nilai besar dan pastikan kalian sudah mengetahui isi binlognya, berapa banyak statement yang ada disana, untuk memperhitungkan valuenya dan mencegah terjadinya error yang lebih parah 🙂

RESET SLAVE

Fungsinya untuk mereset konfigurasi slave. Biasanya statement ini digunakan jika terjadi error replikasi, jadi perlu dikonfigurasi ulang slavenya agar mengacu ke binlog dan posisi yang benar.

Gunakan di RDS:

CALL mysql.rds_reset_external_master

CHANGE MASTER TO

Fungsinya untuk mengkonfigurasi slave, yaitu mengatur filebinlog, posisi binlog, username, password dan host untuk connect ke master.

Jika slave baru dikonfigurasi pertama kali, maka statement CHANGE MASTER TO ini bisa langsung dijalankan. Tapi jika bukan pertama kali, harus dijalankan dulu RESET SLAVE untuk menghapus konfigurasi existing, baru kemudian jalankan CHANGE MASTER TO.

Gunakan di RDS:

CALL mysql.rds_set_external_master

Ambar Hasbiyatmoko

Hello, I'm web developer. Passionate about programming, web server, and networking.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.