Pemulihan data ghost pada docker yang rusak ternyata mudah. Ini adalah cerita pengalaman tentang bahayanya menempatkan semua layanan a.k.a services pada docker container terlebih lagi apabila layanan tersebut memiliki ketergantungan adalah ketika yang satu gagal jalan maka yang terjadi semuanya ikut-ikutan gagal. Saya memiliki beberapa web, 1 fediverse instansi (https://mstdn.id), 1 menggunakan wordpress (http://fenomenaalam.web.id) dan 2 menggunakan ghost (http://qudori.web.id dan http://swordofarchaiden.com). Diantara empat, tiga menggunakan satu buah database yang sama yakni MySQL pada satu buah konfigurasi docker yang sama. Berawal dari prinsip coba-coba dan ingin membuat sederhana maka semua memang saya satukan menjadi satu buah konfigurasi. Ini adalah kekeliruan yang menyebabkan data ghost dan data wordpress saya lenyap.
Repotnya adalah ketika suatu saat salah satu layanan itu gagal karena adanya kesalahan konfigurasi atau data yang rusak. Seperti yang terjadi beberapa hari ini situs qudori.web.id, fenomenaalam.web.id dan swordofarchaiden.com gagal hidup akibat data yang korup pada MySQL. Hal ini menyebabkan sebuah efek domino yang mengakibatkan layanan web server juga ikut-ikutan gagal. Tidak cuma tiga situs bahkan instansi fediverse saya pun juga ikut-ikutan gagal. Efek dominonya kurang lebih menjadi seperti ini.
MySQL => fenomenaalam.web.id, swordofarchaiden.com, qudori.web.id => web server => mstdn.id
Instansi mstdn.id membutuhkan yang namanya layanan web server, tersambung via proxy, akan tetapi ketika tiga buah layanan tersebut gagal hidup maka web server juga ikutan terpengaruh berhenti dan proxynya juga ikutan mati. Repot jadinya karena instansi mstdn.id yang terkoneksi oleh 800an lebih instansi yang lain ikut terpengaruh. Langkah yang saya lakukan adalah jelas segera memisahkan web yang dibangun dengan ghost dan wordpress ke layanan docker lain yang terpisah untuk dilakukan pemulihan tersendiri. Untuk memisahkan sebenarnya sangat mudah cukup buat satu buah konfigurasi dan tempatkan pada folder tersendiri dengan konfigurasi berkas tersendiri.
Selepas dipisah, instansi mstdn.id bisa segera cepat pulih dan aktif kembali sementara tinggallah ghost dan basis data MySQL yang korup. Pelajaran penting yang bisa diambil adalah basis data membutuhkan backup tersendiri baik itu yang sifatnya incremental dari sisi data maupun juga dari sisi konfigurasi. Mencoba ngubek-ngubek stackoverflow (jangan khawatir saya masih ketergantungan dengan stackoverflow untuk beberapa hal yang diluar dugaan). Ternyata pemulihan basis data MySQL yang korup cukup sulit dan melelahkan.
Basis data MySQL tidak mau hidup. Pesan kesalahan pada log menunjukkan beberapa diantaranya “log redo checksums” dan gagalnya layanan mesin penyimanan dari Innodb untuk diaktifkan. Jaman dulu ketika masih menggunakan MyISAM sangat mudah sekali kita tinggal salin tempel folder yang terdapat pada direktori /var/lib/mysql dan taruh pada folder yang masih baru hasil instalasi MySQL dan jalankan langsung hidup.
Beberapa cara sudah dicoba baik dengan memisahkan file ib_logfile* maupun mencoba menaruh tambahan konfigurasi innodb_force_recovery pada my.cnf tidak menghasilkan apa-apa. Sebenarnya ada tools yang dibuat oleh Percona untuk menelusuri satu per satu data pada berkas Innodb tapi instalasinya saja cukup merepotkan. Saya berpikir, pasti ada jalur singkat yang bisa saya lakukan untuk memulihkan data yang sudah hilang / rusak.
Saya mencoba cek direktori dari ghost yang masih tersisa. Ternyata data ghost yang ada tersimpan dengan baik dengan menggunakan format json. Alhamdulillah, semoga ini bisa jadi salah satu cara. Berkas konfigurasi dan isi data dari ghost terdapat pada direktori ghost/content/data. Maka saya berpikir untuk membuat ulang kontainer dari MySQL dari awal. Data yang lama yang rusak saya biarkan dan saya install dua buah basis data, satu MySQL dan satu lagi MariaDB untuk pengembangan. Ghost dan MySQL terinstal dan saya berencana untuk impor berkas json yang tersedia. Menu untuk impor berkas json ada pada settings-> labs -> Import Content. Setelah dilakukan impor, ghost pun berjalan kembali dengan sempurna dan dua buah web saya aktif kembali. Alhamdulillah.