Hari “apes” memang tak ada di kalender. Semalam saya bikin kesalahan fatal: tak sengaja menghapus seluruh isi database kerjaan… di server kantor.
Semua gara-gara saya terlalu pede, membuat migration di kodingan proyek legacy (warisan para pendahulu). Sambil mengomel, “Ini kenapa sih dulu enggak dibikin pakai migration saja?” Lalu saya dengan pede-nya menjalankan php artisan migrate:fresh. Tanpa sadar kalau command itu akan menghapus semua tabel tanpa pandang bulu, baik yang dibuat via migration atau bukan.
Harusnya migrate:refresh, tapi saya pakai migrate:fresh.
Tanpa “re”, beda dua huruf saja, tapi ternyata membuat perbedaan langit dan bumi.
Harusnya elastis kayak play dough, tapi ini elastis versi C4.
Bum! Bye-bye satu database.
Padahal, banyak tabel yang bukan bawaan migration saya.
Dan saya belum seluruhnya tahu fungsi tabel-tabel itu.
Mungkin saya terlalu pede. Atau mungkin karena mengantuk saja.
Tapi “untung” kejadiannya di server staging, bukan production.
Tapi efeknya, mau tidak mau, sebelum saya lanjut melakukan develop, saya mesti restore dulu tabel staging-nya.
“Ah, toh cuma duplikat dari tabel production,” pikirku.
Tapi ternyata, yang dikira “cuma” itu enggak semulus perkiraan. Another "pahit happen", ada beberapa kali error, kena isu GTID, dan sebangsanya waktu mencoba ekspor dan restore. Belum lagi tidak ada fitur verbosity waktu backup jadi tidak tahu ini jalan atau malah nge-hang.
Sebelum tersesat terlalu jauh, ya sudah, coba putar arah—workaround—tak lagi backup dan restore se-database, tapi per tabel.
Tapi ada terlalu banyak tabel!
Kalau satu per satu, bakal menghabiskan waktu.
Lalu kepikiran, kenapa enggak dibuat shell script-nya saja? Menjalankan mysqldump untuk setiap tabel, lalu me-restore mysql ke database staging yang hancur kena “bom” tadi. Karena size-nya besar dan banyak tabel, bisa ditinggal tidur.
The rest is history, saya tinggal tidur, bangun-bangun (alhamdulillah) sudah kembali normal.
Tapi dari situ saya belajar.
Saya akhirnya membuat kode untuk memproteksi saya dari menjalankan (ulang) kode nuklir tadi. Oh, ternyata bisa ya sebuah kode Artisan "di-banned" untuk dijalankan. Next step, bisa membuat user database dengan role yang lebih terbatas untuk daily operation-nya, dan user database tersendiri untuk migration.
Saya juga belajar untuk lebih banyak melakukan automate task dengan sesederhana shell script, daripada menjalankan command satu per satu.
Dan mantra yang terkadang kita anggap remeh:
ALWAYS BACKUP YOUR DATABASE!
Karena hari apes tak ada di kalender.
Sometimes "pahit" happens.
Untung tadi malam "cuma" pahit kopi robusta,
bukan pahit es kopi sianida.
Malang, 16 Juni 2025
#100harinulis #100harimenulis