Error: MySQL shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper privileges, a crash, or a shutdown by another method.
Press the Logs button to view error logs and check
the Windows Event Viewer for more clues
Pesan MySQL shutdown unexpectedly adalah salah satu error XAMPP yang paling sering ditemui, terutama di Windows. Biasanya muncul tiba-tiba: kemarin XAMPP masih normal, hari ini tombol Start MySQL ditekan, statusnya sempat hijau, lalu beberapa detik kemudian mati lagi dan pesan merah di atas muncul di panel bawah XAMPP Control Panel.
Pesan itu sebenarnya tidak menyebut penyebab pastinya. Ia hanya memberi daftar kemungkinan: port terpakai, file yang hilang, hak akses, atau database yang crash. Kabar baiknya, dalam praktik penyebabnya hampir selalu satu dari tiga hal: port 3306 sudah dipakai program lain, file data MySQL rusak karena komputer dimatikan saat MySQL masih jalan, atau masalah hak akses. Artikel ini membahas cara memastikan penyebabnya lebih dulu, lalu solusinya satu per satu dari yang paling aman.
Satu catatan penting sebelum mulai: jangan langsung menghapus atau menginstal ulang XAMPP. Folder C:\xampp\mysql\data berisi semua database Anda. Menginstal ulang tanpa menyelamatkan folder itu sama dengan menghapus seluruh data.
Langkah 1: Baca log error, jangan menebak
Pesan di XAMPP Control Panel hanya ringkasan. Penyebab sebenarnya tertulis di file log MySQL. Ada dua cara membukanya:
- Di XAMPP Control Panel, pada baris MySQL klik tombol Logs, lalu pilih
mysql_error.log. - Atau buka langsung file
C:\xampp\mysql\data\mysql_error.logdengan Notepad.
Gulir ke bagian paling bawah, karena baris terbaru ada di akhir file. Perhatikan baris yang mengandung kata [ERROR]. Berikut pola yang paling umum dan artinya:
| Isi log | Arti | Solusi |
|---|---|---|
Can't start server: Bind on TCP/IP port atau Do you already have another mysqld server running on port: 3306 ? | Port 3306 sudah dipakai program lain | Langkah 2 |
InnoDB: ... corrupted, Plugin 'InnoDB' registration as a STORAGE ENGINE failed, Unknown/unsupported storage engine: InnoDB | File data InnoDB rusak | Langkah 3 dan 5 |
Aria recovery failed atau Could not open mysql.plugin table | Log mesin Aria rusak | Langkah 4 |
Access denied, Permission denied, Can't create/write to file | Masalah hak akses folder | Langkah 6 |
Kalau log kosong atau tidak memberi petunjuk, lanjutkan berurutan dari Langkah 2. Urutannya sengaja disusun dari yang paling aman ke yang paling berisiko.
Langkah 2: Cek apakah port 3306 sudah dipakai
MySQL di XAMPP memakai port 3306. Kalau ada program lain yang lebih dulu memakai port itu, MySQL XAMPP akan langsung mati. Pelaku yang paling sering adalah MySQL Server resmi dari Oracle yang terpasang sebagai Windows Service (biasanya bernama MySQL80), aplikasi lain seperti Laragon atau WAMP, atau proses MySQL XAMPP lama yang tidak benar-benar berhenti.
Buka Command Prompt, lalu jalankan:
netstat -ano | findstr :3306
Jika ada hasil dengan status LISTENING, angka di kolom paling kanan adalah PID (nomor proses). Cari tahu program apa itu:
tasklist /FI "PID eq 4321"
Ganti 4321 dengan PID yang muncul. Dari sini ada tiga kemungkinan:
- Hasilnya
mysqld.exedari XAMPP yang "nyangkut". Matikan lewat Task Manager (tab Details, carimysqld.exe, End task), lalu Start lagi dari XAMPP. - Hasilnya MySQL Server lain sebagai Windows Service. Tekan Win + R, ketik
services.msc, cari service bernamaMySQLatauMySQL80, klik kanan lalu Stop. Agar tidak terulang setelah restart, buka Properties dan ubah Startup type menjadi Manual. - Anda memang butuh kedua MySQL tetap jalan. Pindahkan MySQL XAMPP ke port lain, misalnya
3307, seperti di bawah.
Cara mengganti port MySQL XAMPP ke 3307
- Di XAMPP Control Panel, baris MySQL, klik Config lalu
my.ini. - Ubah
port=3306menjadiport=3307. Ada dua tempat: di bawah bagian[client]dan di bawah bagian[mysqld]. Ubah keduanya. - Agar panel XAMPP ikut tahu port barunya, klik tombol Config di kanan atas panel, pilih Service and Port Settings, tab MySQL, isi Main Port dengan
3307, lalu Save. - Agar phpMyAdmin tetap bisa terhubung, buka
C:\xampp\phpMyAdmin\config.inc.phpdan tambahkan baris berikut di bawah baris$cfg['Servers'][$i]['host']:
$cfg['Servers'][$i]['port'] = '3307';
Jangan lupa, aplikasi Anda juga harus memakai port baru. Di Laravel, ubah DB_PORT=3307 di file .env. Di PHP native dengan PDO, tambahkan port=3307 pada DSN, contohnya mysql:host=127.0.0.1;port=3307;dbname=toko. Pola koneksi yang aman dibahas di artikel koneksi database MySQL dengan PHP PDO.
Langkah 3: Pulihkan dari folder backup bawaan XAMPP
Kalau port tidak bermasalah, penyebab paling umum adalah file data yang rusak. Ini hampir selalu terjadi setelah komputer mati mendadak (listrik padam, baterai laptop habis, atau Windows di-shutdown) saat MySQL masih berjalan. File sistem MySQL rusak, sehingga server tidak bisa menyala lagi.
XAMPP menyediakan salinan bersih file sistem MySQL di folder C:\xampp\mysql\backup. Trik di bawah mengganti file sistem yang rusak dengan salinan bersih itu, sambil mempertahankan database milik Anda. Ikuti urutannya dengan teliti:
- Stop MySQL dan tutup XAMPP Control Panel.
- Backup dulu. Salin seluruh folder
C:\xampp\mysql\datake tempat lain, misalnya ke Desktop, dan beri namadata_cadangan. Langkah ini wajib. Kalau ada yang salah, Anda masih bisa kembali. - Ganti nama folder
C:\xampp\mysql\datamenjadidata_old. - Salin folder
C:\xampp\mysql\backup, lalu tempel dan beri namadata. Sekarang Anda punya folderdatabaru yang bersih. - Dari
data_old, salin folder database milik Anda ke folderdatayang baru. Nama folder sama dengan nama database, misalnyatokoataularavel_app. Jangan salin foldermysql,performance_schema,phpmyadmin, dantest, karena folder itulah yang diganti dengan versi bersih. - Salin juga file
ibdata1daridata_oldkedata, dan pilih Replace saat ditanya. File ini menyimpan data tabel InnoDB. Tanpa file ini, tabel InnoDB akan muncul tapi tidak bisa dibuka. - Buka XAMPP Control Panel dan Start MySQL.
Jika MySQL menyala, buka phpMyAdmin dan cek apakah tabel-tabel Anda bisa dibuka. Kalau semuanya normal, folder data_old boleh dihapus beberapa hari kemudian setelah Anda yakin tidak ada data yang hilang. Folder data_cadangan di Desktop tetap simpan sebagai pengaman.
Perhatikan bahwa user dan password MySQL yang pernah Anda buat akan kembali ke bawaan XAMPP (user root tanpa password), karena daftar user tersimpan di folder mysql yang diganti. Buat ulang user tersebut jika aplikasi Anda memakainya.
Langkah 4: Atasi error "Aria recovery failed"
XAMPP versi baru memakai MariaDB, dan MariaDB menyimpan tabel sistemnya dengan mesin bernama Aria. Jika log menampilkan Aria recovery failed, biasanya file log Aria yang rusak, bukan datanya.
Berlangganan gratis. Artikel & tutorial coding terbaru langsung ke email kamu. Tanpa spam.
- Stop MySQL dan pastikan sudah membuat backup folder
dataseperti di Langkah 3. - Di folder
C:\xampp\mysql\data, cari file bernamaaria_log_controldanaria_log.00000001(angkanya bisa berbeda). - Pindahkan file-file tersebut ke folder lain (jangan langsung dihapus).
- Start MySQL. MariaDB akan membuat file log Aria yang baru secara otomatis.
Jika MySQL sudah bisa menyala, file yang dipindahkan tadi tidak dibutuhkan lagi. Jika masih gagal, kembalikan file tersebut dan lanjutkan ke Langkah 3.
Langkah 5: Nyalakan paksa dengan innodb_force_recovery
Gunakan langkah ini hanya jika Langkah 3 gagal dan log jelas menunjukkan InnoDB rusak. Tujuannya bukan untuk memakai MySQL seperti biasa, melainkan menyalakannya dalam mode darurat supaya data masih bisa diekspor.
- Buka
my.ini, lalu di bawah bagian[mysqld]tambahkan baris:
innodb_force_recovery = 1
- Start MySQL. Jika masih gagal, naikkan angkanya bertahap ke
2, lalu3, dan seterusnya. Nilai di atas4berisiko merusak data lebih jauh, jadi berhentilah di angka terkecil yang membuat MySQL menyala. - Setelah menyala, segera ekspor database Anda dengan
mysqldumpatau menu Export di phpMyAdmin. Panduan lengkapnya ada di artikel backup dan restore database MySQL dengan mysqldump. - Hapus baris
innodb_force_recoverydarimy.ini, pulihkan folderdatayang bersih (Langkah 3 tanpa menyalin folder database), lalu impor kembali hasil ekspor tadi.
Langkah 6: Masalah hak akses dan antivirus
Jika log menyebut Access denied atau Can't create/write to file, MySQL tidak punya izin menulis ke foldernya sendiri. Beberapa hal yang bisa dicoba:
- Tutup XAMPP, lalu klik kanan
xampp-control.exedan pilih Run as administrator. - Pastikan XAMPP terpasang di
C:\xampp, bukan diC:\Program Files. Folder Program Files dilindungi oleh Windows (UAC) dan sering membuat MySQL gagal menulis file. - Periksa antivirus atau Windows Defender. Beberapa antivirus mengunci atau mengkarantina file di folder
data. Tambahkan folderC:\xamppke daftar pengecualian. - Pastikan disk tidak penuh. MySQL akan mati jika tidak bisa menulis file log atau file sementara.
Cara mencegah error ini terulang
Hampir semua kasus file data rusak berawal dari MySQL yang dimatikan secara paksa. Beberapa kebiasaan kecil berikut mencegahnya:
- Selalu klik Stop pada MySQL di XAMPP Control Panel sebelum mematikan atau me-restart komputer.
- Jangan menutup proses
mysqld.exelewat Task Manager kecuali benar-benar terpaksa. - Backup rutin database penting dengan
mysqldump, misalnya seminggu sekali. Satu file.sqljauh lebih mudah dipulihkan dibanding folderdatayang rusak. - Untuk laptop, aktifkan pengaturan agar Windows memberi peringatan sebelum baterai benar-benar habis.
- Jangan menjalankan dua server MySQL di port yang sama. Pilih salah satu, atau pisahkan port seperti di Langkah 2.
Kalau Anda baru belajar MySQL dan ingin memahami dasar-dasarnya, mulai dari panduan belajar MySQL untuk pemula.
FAQ
Apakah menginstal ulang XAMPP akan memperbaiki error ini?
Bisa, tetapi semua database di folder data akan hilang jika Anda tidak menyelamatkannya lebih dulu. Langkah 3 memberikan hasil yang sama dengan menginstal ulang, tanpa kehilangan database.
MySQL sempat hijau lalu mati lagi. Apa artinya?
MySQL berhasil dijalankan, tetapi berhenti saat membaca file data atau saat mencoba memakai port. Jawabannya ada di baris terakhir mysql_error.log.
Bolehkah saya menghapus file ib_logfile0 dan ib_logfile1?
Saran ini sering beredar, tetapi berisiko. File tersebut menyimpan perubahan yang belum ditulis ke tabel. Menghapusnya bisa membuat data terbaru hilang atau tabel rusak. Selalu coba Langkah 3 lebih dulu, dan backup folder data sebelum menghapus apa pun.
Apakah error ini juga terjadi di macOS dan Linux?
Bisa, dengan penyebab yang sama: port terpakai, data rusak, atau hak akses. Lokasi foldernya berbeda. Di macOS biasanya /Applications/XAMPP/xamppfiles/var/mysql, dan di Linux /opt/lampp/var/mysql.
Bagaimana jika semua langkah gagal?
Selama folder data_cadangan masih ada, data Anda belum hilang. Instal XAMPP baru di lokasi lain, lalu pindahkan folder database dan ibdata1 dari cadangan seperti pada Langkah 3. Jika versi MariaDB-nya sama, data biasanya bisa dibaca kembali.