Daftar Isi
- Problem #1: Service MariaDB Menolak Start
- Percobaan Pertama: Memperbaiki Hak Akses Direktori (chown)
- Problem #2: Menemukan ‘Bad Magic Header in tc.log’ di Log System
- Solusi Utama: Menyingkirkan File tc.log yang Corrupt
- Catatan Pembelajaran & Kesimpulan
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.logdi 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