Server

Error Establishing a Database Connection — Cara Mengatasi

Diperbarui 2026-08-30Baca ~9 menit

Halaman putih dengan satu baris kalimat adalah salah satu kerusakan paling menakutkan, karena ia menggantikan seluruh situs, bukan hanya sebagiannya. Kabar baiknya, daftar penyebabnya sangat pendek.

Hanya ada empat kemungkinan: kredensial di file konfigurasi sudah tidak benar, layanan database tidak berjalan, jumlah koneksi mentok di batas, atau datanya rusak. Yang perlu Anda lakukan pertama bukan memperbaiki, melainkan menentukan Anda di kelompok mana — karena keempat penanganannya sama sekali berbeda.

Mempersempit penyebab dalam dua menit

Sebelum menyentuh file apa pun, jawab satu pertanyaan: apakah layanan database-nya berjalan?

Kalau punya SSH, jalankan "systemctl status mysql" atau "systemctl status mariadb". Kalau memakai shared hosting, coba buka phpMyAdmin dari panel — kalau bisa masuk, layanannya hidup dan kredensial situs Anda yang bermasalah.

Yang Anda amatiPenyebab yang hampir pasti
Layanan berhentiRAM habis atau layanan crash — restart lalu baca log
Layanan jalan, phpMyAdmin bisa masukKredensial di file konfigurasi salah
Error hanya muncul saat ramaiMentok di max_connections
Satu tabel error, tabel lain normalTabel rusak — perlu diperbaiki
Baru terjadi setelah pindah hostingHostname salah atau user belum diberi hak akses
💡 Kalau situs masih normal kemarin dan Anda tidak mengubah apa pun, kemungkinan terbesar layanannya mati karena kehabisan RAM. Jalankan "dmesg | grep -i oom" untuk memastikan sebelum mencurigai file konfigurasi.

Penyebab 1 — Kredensial salah

Ini penyebab paling umum tepat setelah pindah hosting, restore backup, atau mengganti password di panel.

Untuk WordPress, empat nilai di wp-config.php harus sama persis: DB_NAME, DB_USER, DB_PASSWORD, dan DB_HOST. Yang paling sering salah adalah DB_HOST — "localhost" benar di sebagian besar server, tapi beberapa penyedia memakai hostname khusus, dan nilai yang benar selalu ada di panel hosting.

Kesalahan kedua terbanyak adalah prefiks nama user dan nama database. Banyak panel menambahkan prefiks akun secara otomatis, sehingga database yang Anda beri nama "wordpress" sebenarnya bernama "user123_wordpress".

Uji cepat dengan menyambung sendiri: "mysql -u namauser -p -h localhost namadatabase". Kalau perintah ini berhasil sementara situs tetap error, kredensial bukan masalahnya dan Anda bisa lanjut ke bagian berikutnya.

Penyebab 2 — Layanan database mati

Ketika MySQL atau MariaDB tidak berjalan, semua situs di server itu menampilkan error yang sama. Restart biasanya langsung memulihkannya, tapi berhenti di situ berarti melewatkan bagian pentingnya.

Penyebabnya hampir selalu kehabisan memori. VPS kecil yang menjalankan web server, PHP, dan database sekaligus akan mentok RAM saat ramai, kernel memilih proses paling rakus memori untuk dibunuh, dan itu biasanya MySQL.

Jalankan "dmesg | grep -i oom" untuk melihat apakah kernel turun tangan. Kalau ya, restart hanya membeli waktu sampai kejadian berikutnya — penanganan sebenarnya adalah menambah swap, menurunkan pemakaian memori database, atau menambah RAM.

Penyebab kedua adalah disk penuh. Database yang tidak bisa menulis akan berhenti total. "df -h" memberi jawaban dalam sedetik, dan log serta backup lama adalah tempat pertama yang perlu dibersihkan.

💡 Di VPS 1GB RAM tanpa swap, MySQL dibunuh OOM killer nyaris pasti akan terjadi. Menambahkan 2GB swap sering mengubah insiden mingguan menjadi tidak pernah terulang.

Penyebab 3 — Koneksi habis, dan penyebab 4 — Tabel rusak

Kalau error hanya muncul saat jam ramai lalu hilang sendiri, Anda sedang mentok di max_connections. Setiap pengunjung memakai satu koneksi, dan ketika semuanya terpakai, pengunjung berikutnya mendapat pesan error ini.

Godaannya adalah menaikkan max_connections, tapi setiap koneksi memakan memori sehingga menaikkannya berlebihan hanya menukar error ini dengan error OOM. Penanganan yang lebih awet adalah mengaktifkan page cache agar sebagian besar kunjungan tidak menyentuh database, dan mencari query lambat yang menahan koneksi lebih lama dari seharusnya.

Tabel rusak punya gejala yang sangat berbeda: sebagian besar situs tetap jalan, hanya beberapa halaman atau satu fitur yang error. Penyebabnya biasanya listrik padam atau disk penuh saat proses penulisan.

Untuk WordPress, tambahkan define('WP_ALLOW_REPAIR', true); ke wp-config.php lalu buka /wp-admin/maint/repair.php untuk menjalankan alat perbaikan bawaan. Hapus baris itu segera setelah selesai, karena halaman tersebut tidak memerlukan login.

Di luar WordPress, "mysqlcheck --repair --all-databases" melakukan hal serupa. Apa pun caranya, buat backup sebelum memperbaiki — alat perbaikan tabel kadang harus membuang baris yang tidak bisa diselamatkan.

Mencegahnya terulang

  • Tambahkan swap kalau VPS Anda ber-RAM kecil. Ini perubahan sekali jalan yang menghapus penyebab tersering dari insiden ini.
  • Aktifkan page cache. Setiap kunjungan yang dilayani dari HTML statis adalah satu koneksi database yang tidak pernah dibuat.
  • Pantau ruang disk dan pasang peringatan di angka 80%. Disk penuh menghentikan layanan sekaligus merusak tabel, jadi satu peringatan mencegah dua insiden.
  • Backup otomatis harian dan uji pemulihannya. Backup yang belum pernah dicoba dipulihkan hanyalah sebuah asumsi.
  • Simpan kredensial database di satu tempat. Insiden ini sangat sering terjadi setelah mengganti password di panel tapi lupa memperbarui file konfigurasi.
  • Aktifkan slow query log. Query lambat adalah akar bersama dari kehabisan koneksi maupun kehabisan memori.

Butuh RAM dan kendali agar database tidak tumbang lagi?

Cloud VPS NVMe dengan sumber daya khusus dan akses root penuh — atur sendiri swap, cache, dan MySQL. Mulai ฿150/bulan.

Pertanyaan yang Sering Diajukan

Situs saya normal kemarin dan saya tidak mengubah apa pun. Kenapa hari ini error?

Hampir selalu layanan database yang mati, biasanya karena kehabisan RAM atau disk penuh. Jalankan "systemctl status mysql" untuk melihat statusnya, "dmesg | grep -i oom" untuk tahu apakah kernel membunuhnya, dan "df -h" untuk memeriksa disk. File konfigurasi tidak berubah sendiri, jadi curigai itu paling terakhir.

Saya sudah restart MySQL dan situsnya jalan lagi. Sudah selesai?

Belum. Restart menangani gejala, bukan penyebab, dan masalahnya akan kembali. Lihat log tepat sebelum waktu crash: kalau OOM, tambah swap atau turunkan pemakaian memori; kalau disk penuh, bersihkan dan pasang peringatan.

Apakah alat perbaikan tabel WordPress aman?

Aman, tapi backup database dulu — alat perbaikan kadang harus membuang baris yang tidak bisa diselamatkan. Dan hapus baris WP_ALLOW_REPAIR dari wp-config.php begitu selesai, karena halaman perbaikan itu bisa dibuka siapa saja tanpa login.

Kenapa errornya hanya muncul saat pengunjung ramai?

Karena Anda mentok di max_connections. Menaikkan batasnya bersifat sementara dan memakan RAM; yang lebih awet adalah mengaktifkan page cache agar sebagian besar kunjungan tidak butuh database, sambil mencari query lambat yang menahan koneksi lebih lama dari seharusnya.