Mengatasi MariaDB Gagal Start dan Error HY000/2002 akibat Corrupt tc.log

Daftar Isi

Halo Sobat! Beberapa waktu lalu saat saya sedang mengelola server berbasis Alpine Linux, tiba-tiba aplikasi PHP yang saya jalankan tidak bisa terhubung ke database MariaDB. Di layar muncul pesan error yang lumayan familiar:
mysqli::real_connect(): (HY000/2002): No such file or directory

Meskipun studi kasus ini saya alami di Alpine Linux, metode perbaikan file tc.log dan pemeriksaan izin akses direktori ini sebenarnya berlaku universal bagi Sobat yang menggunakan MariaDB maupun MySQL di berbagai sistem operasi, mulai dari distro Linux lain (Ubuntu, Debian, RedHat, CentOS), Windows Server, hingga macOS.

Problem #1: Service MariaDB Menolak Start

Langkah awal yang saya lakukan tentu memeriksa dan mencoba menjalankan service MariaDB. Di Alpine Linux yang menggunakan OpenRC, perintahnya adalah:

# Di Alpine Linux (OpenRC)
localhost:~# rc-service mariadb status
 * status: stopped

localhost:~# rc-service mariadb start
 * Starting mariadb ...
 * ERROR: mariadb failed to start

Sebagai bahan perbandingan untuk Sobat yang menggunakan OS lain, perintah untuk mengontrol service MariaDB adalah sebagai berikut:

  • Ubuntu / Debian / RedHat / CentOS / Fedora (Systemd):
    sudo systemctl status mariadb
    sudo systemctl start mariadb
  • Windows Server / Windows OS (CMD / PowerShell):
    net start MariaDB
    # Atau via PowerShell:
    Start-Service MariaDB
  • macOS (Homebrew):
    brew services status mariadb
    brew services start mariadb

Kecurigaan awal saya langsung tertuju pada masalah umum di Linux: hak akses (permission) direktori data serta folder socket /run/mysqld.

Percobaan Pertama: Memperbaiki Hak Akses Direktori (chown)

Saya mencoba merapikan hak akses folder data standar (/var/lib/mysql) menggunakan perintah chown dan memastikan folder socket MariaDB sudah dibuat serta dimiliki oleh user mysql:

# Memastikan kepemilikan folder data standar di Linux (Alpine, Ubuntu, RHEL, macOS)
chown -R mysql:mysql /var/lib/mysql

# Membuat direktori socket dan mengatur permission
mkdir -p /run/mysqld
chown -R mysql:mysql /run/mysqld

(Catatan: Bagi Sobat yang menggunakan Windows Server, konsep chown ini setara dengan membuka Security Properties pada folder data MariaDB, lalu memastikan user Service MySQL/Network Service memiliki akses ‘Full Control’).

Setelah merapikan hak akses, saya coba jalankan kembali service-nya. Hasilnya? MariaDB ternyata masih tetap gagal berjalan (failed to start). Dari sini saya tahu ada masalah lain yang mengganjal di latar belakang.

Problem #2: Menemukan ‘Bad Magic Header in tc.log’ di Log System

Untuk melihat apa yang sebenarnya terjadi saat daemon MariaDB mencoba booting, saya mengintip log sistem menggunakan perintah tail:

tail -n 30 /var/log/messages

(Untuk Ubuntu/Debian/RHEL, Sobat bisa mengecek via journalctl -u mariadb atau file /var/log/mysql/error.log).

Di situlah saya menemukan penyebab utamanya:

Sep 11 22:23:12 localhost daemon.err mysqld: [Note] Recovering after a crash using tc.log
Sep 11 22:23:12 localhost daemon.err mysqld: [ERROR] Bad magic header in tc log
Sep 11 22:23:12 localhost daemon.err mysqld: [ERROR] Crash recovery failed. Either correct the problem (...) or delete tc log...
Sep 11 22:23:12 localhost daemon.err mysqld: [ERROR] Can't init tc log
Sep 11 22:23:12 localhost daemon.err mysqld: [ERROR] Aborting

Rupanya server sempat mati mendadak (crash) sebelumnya, sehingga file tc.log (Transaction Coordinator Log) mengalami korupsi data (bad magic header). MariaDB gagal melakukan crash recovery dan akhirnya membatalkan proses start.

Solusi Utama: Menyingkirkan File tc.log yang Corrupt

File tc.log berfungsi untuk koordinasi transaksi sementara dan MariaDB/MySQL di OS mana pun (Linux, Windows, macOS) akan membuatnya kembali secara otomatis jika file tersebut hilang. Oleh karena itu, langkah paling ampuh adalah memindahkan atau menghapus file tersebut dari direktori data:

# Memindahkan file tc.log yang rusak sebagai cadangan (Linux / macOS)
mv /var/lib/mysql/tc.log /var/lib/mysql/tc.log.bak

# Atau langsung menghapusnya jika tidak diperlukan:
# rm /var/lib/mysql/tc.log

(Jika Sobat menggunakan Windows Server, cukup buka folder data MariaDB/MySQL, biasanya di C:\ProgramData\MySQL\MySQL Server X.X\data\—lalu rename atau hapus file tc.log tersebut).

Setelah file tc.log yang bermasalah disingkirkan, saya mencoba menjalankan kembali service MariaDB sesuai OS masing-masing:

# Alpine Linux
rc-service mariadb start

# Ubuntu / Debian / RedHat / CentOS
sudo systemctl start mariadb

# Windows (CMD / PowerShell)
net start MariaDB

# macOS (Homebrew)
brew services start mariadb

Hasilnya berhasil! Status MariaDB langsung berubah menjadi started / active (running), dan error koneksi HY000/2002 di aplikasi PHP pun hilang seketika.

Catatan Pembelajaran & Kesimpulan

Dari eksperimen dan perbaikan ini, ada dua poin penting yang saya jadikan catatan pribadi saat mengelola database MariaDB maupun MySQL:

  • Hak Akses Direktori (chown): Pastikan direktori data (seperti /var/lib/mysql) dan direktori socket memiliki izin akses yang tepat untuk user database.
  • Pembersihan tc.log: Jika MariaDB menolak berjalan setelah server mati mendadak, solusinya sama di OS mana pun (Alpine, Ubuntu, RHEL, Windows, macOS), cukup bersihkan atau hapus file tc.log di folder data. File ini sangat aman dihapus karena akan diregenerasi secara otomatis oleh MariaDB saat startup.

Semoga catatan pengalaman ini bermanfaat buat Sobat yang mungkin sedang menghadapi kendala serupa. Kalau Sobat punya trik atau pengalaman lain seputar MariaDB, silakan tulis di kolom komentar ya

Tinggalkan Balasan

Informasi kontak Anda tidak akan dipublikasikan. Kolom yang wajib diisi ditandai *. Notifikasi akan dikirim ke telegram untuk mempercepat tanggapan komentar