📑 Daftar Isi
- Gejala & Error Message
- Penjelasan Teknis: Apa Itu File .MYD?
- Root Cause: Kenapa File servers.MYD Bisa Hilang?
- Step-by-Step Solution
- Metode 1: Cek Integritas Disk Terlebih Dahulu
- Metode 2: Restore dari Backup MySQL
- Metode 3: Repair Tabel Menggunakan MySQL Repair
- Metode 4: Buat Ulang Tabel servers (Emergency Recovery)
- Metode 5: Resync Data dari node/konfigurasi Virtualizor
- Verifikasi Setelah Fix
- Pro Tips & Warnings
- Troubleshooting Table: Error yang Mungkin Muncul
- FAQ
- Related Issues
- Kesimpulan
Jadi gini, suatu malam saya dapat WhatsApp dari client yang panik banget. Panel Virtualizornya mati total — nggak bisa login, nggak bisa manage VPS, yang muncul cuma error merah di layar. Dia kira server-nya kena hack atau apalah. Tapi pas saya cek, ternyata masalahnya lebih “sederhana” dari yang dia bayangkan — tapi juga lebih bahaya kalau nggak ditangani dengan benar.
Masalahnya begini: database MySQL untuk Virtualizor itu corrupt. File fisiknya hilang dari disk. Nggak ada yang hapus sengaja, nggak ada yang format — tiba-tiba file servers.MYD nggak ketemu. Error yang muncul persis seperti ini:
Could not make the Query.
SELECT * FROM servers ORDER BY serid ASC
Array
(
[0] => HY000
[1] => 29
[2] => File './virtualizor/servers.MYD' not found (Errcode: 30)
)
Bagi kamu yang baru pertama kali lihat error ini, mungkin bingung — “Errcode: 30 itu apa sih?” Tenang, kita bahas satu per satu dari awal. Artikel ini akan jadi panduan lengkap kamu mulai dari memahami error, mencari akar masalah, sampai langkah fix-nya.
Gejala & Error Message
Error ini biasanya muncul di halaman utama Virtualizor kamu. Ketika kamu buka panel admin Virtualizor, alih-alih melihat daftar VPS seperti biasa, kamu akan melihat error message seperti ini:
Could not make the Query.
SELECT * FROM servers ORDER BY serid ASC
Array
(
[0] => HY000
[1] => 29
[2] => File './virtualizor/servers.MYD' not found (Errcode: 30)
)
Mari kita bedah error ini baris per baris supaya kamu paham apa yang sebenarnya terjadi.
| Baris Error | Artinya |
|---|---|
Could not make the Query. |
MySQL gagal mengeksekusi query SQL |
SELECT * FROM servers ORDER BY serid ASC |
Query yang gagal: mengambil semua data dari tabel servers |
[0] => HY000 |
Error code SQLSTATE generik (connection/driver issue) |
[1] => 29 |
Errcode 29 = ENOENT (File or directory not found) |
[2] => File './virtualizor/servers.MYD' not found (Errcode: 30) |
File servers.MYD hilang dari direktori MySQL data |
Nah, dari tabel di atas sudah jelas kan? MySQL bilang, “Gue nggak bisa baca tabel servers karena file-nya physically nggak ada di disk.” File .MYD itu adalah file data MyISAM — tempat MySQL menyimpan isi tabel untuk storage engine MyISAM.
Penjelasan Teknis: Apa Itu File .MYD?
Sebelum kita ke solusi, penting untuk paham dulu anatomy database MySQL yang dipakai Virtualizor.
Virtualizor (versi lama dan beberapa versi stabil) menggunakan MySQL dengan storage engine MyISAM. Di MyISAM, setiap tabel tersimpan dalam 3 file:
| Ekstensi | Fungsi | Contoh |
|---|---|---|
.MYD |
MyISAM Data — isi baris data tabel | servers.MYD |
.MYI |
MyISAM Index — index untuk pencarian cepat | servers.MYI |
.frm |
Format — struktur definisi tabel | servers.frm |
Jadi kalau file servers.MYD hilang, itu artinya semua data baris di tabel servers nggak bisa dibaca. MySQL masih tahu tabelnya ada (karena .frm masih ada), tapi isinya udah nggak bisa diakses. Ibarat buku yang sampulnya masih ada tapi semua halaman dalamnya hilang.
Root Cause: Kenapa File servers.MYD Bisa Hilang?
Setelah handle belasan kasus serupa, saya bisa simpulkan beberapa penyebab utama kenapa file ini bisa hilang. Ini bukan hal yang aneh — saya pernah lihat ini terjadi di server yang sama sekali nggak pernah diotak-atik secara manual.
.MYD hilang total — bahkan .MYI-nya juga. Penyebabnya? Server kehabisan disk space dan MySQL crash di tengah-tengah operasi write. Ketika disk full, MySQL nggak bisa menulis data baru, dan dalam beberapa kasus, file yang sedang ditulis bisa corrupt atau bahkan hilang.Penyebab Umum
| Penyebab | Kemungkinan | Keterangan |
|---|---|---|
| Disk space habis | Tinggi | MySQL crash saat write, file corrupt/hilang |
| MySQL crash tiba-tiba | Sedang | Power failure, OOM killer, atau kill -9 pada mysqld |
| Filesystem corruption | Sedang | Hard reboot, disk error, atau bad sector |
| Accidental deletion | Rendah | Seseorang menghapus file manual (jarang) |
| rsync/backup restore error | Rendah | Restore backup yang tidak lengkap |
| Malware/virus | Rendah | Ada yang memodifikasi file database |
Step-by-Step Solution
Oke, sekarang kita masuk ke bagian yang paling kamu tunggu — gimana cara fix-nya. Saya akan bagikan beberapa metode, dari yang paling aman sampai yang perlu hati-hati. Ikuti urutannya, jangan loncat-loncat.
Metode 1: Cek Integritas Disk Terlebih Dahulu
Sebelum kita sentuh database, pastikan dulu kondisi disk-nya sehat. Percuma kita restore database kalau disk-nya bermasalah.
# Cek filesystem
df -h
# Cek apakah ada error di filesystem
dmesg | grep -i error
# Cek health disk (jika pakai SMART)
smartctl -a /dev/sda
Kalau hasilnya menunjukkan disk penuh, bersihkan dulu file yang nggak perlu. Kalau ada filesystem error, repair dulu sebelum lanjut.
# Jika filesystem ext4 dan ada error (HARUS unmount dulu atau pakai recovery mode)
fsck -y /dev/sda1
fsck pada filesystem yang sedang ter-mount. Ini bisa menyebabkan data corruption yang lebih parah. Gunakan recovery mode atau live CD jika perlu.Metode 2: Restore dari Backup MySQL
Ini metode yang paling ideal — kalau kamu punya backup yang lengkap dan up-to-date.
# 1. Cek apakah ada backup file database virtualizor
ls -la /var/backups/mysql/
ls -la /home/virtualizor/backups/
# 2. Cek juga di direktori Virtualizor sendiri
ls -la /usr/local/virtualizor/
Kalau kamu backup manual menggunakan mysqldump:
# Restore dari backup dump
mysql -u root -p virtualizor < /path/to/virtualizor-backup.sql
Atau kalau kamu backup whole database directory:
# Stop MySQL dulu
systemctl stop mysqld
# Backup current state (jaga-jaga)
cp -a /var/lib/mysql/virtualizor /var/lib/mysql/virtualizor.bak.$(date +%Y%m%d)
# Copy backup ke direktori yang benar
cp -a /path/to/backup/virtualizor /var/lib/mysql/
# Fix permission
chown -R mysql:mysql /var/lib/mysql/virtualizor
# Start MySQL kembali
systemctl start mysqld
Metode 3: Repair Tabel Menggunakan MySQL Repair
Kalau file .MYD hilang tapi .MYI dan .frm masih ada, kamu bisa coba repair. Tapi kalau .MYD hilang total, repair biasanya nggak akan berhasil karena data source-nya udah nggak ada.
# Login ke MySQL
mysql -u root -p
# Coba repair tabel servers
USE virtualizor;
REPAIR TABLE servers;
Kalau hasilnya “OK” atau “Table is already up to date” — bagus, masalah selesai. Tapi kalau muncul error “Can’t create/write to file” atau “Table doesn’t exist” — berarti kamu perlu metode selanjutnya.
Metode 4: Buat Ulang Tabel servers (Emergency Recovery)
Ini metode terakhir kalau backup nggak ada dan repair gagal. Perlu hati-hati karena kamu akan membuat tabel baru dari awal.
Sebelum menjalankan perintah di bawah, pastikan kamu sudah:
1. Backup seluruh direktori /var/lib/mysql/virtualizor/ yang tersisa
2. Backup file konfigurasi Virtualizor (/usr/local/virtualizor/conf/virt_config.php)
3. Catat atau screenshot semua VPS yang sedang berjalan di server
Perintah tanpa backup bisa menyebabkan data VPS hilang permanen.
# 1. Backup dulu semua yang tersisa
cp -a /var/lib/mysql/virtualizor /var/lib/mysql/virtualizor.emergency.$(date +%Y%m%d)
# 2. Login MySQL
mysql -u root -p
# 3. Drop tabel yang corrupt (HATI-HATI!)
USE virtualizor;
DROP TABLE IF EXISTS servers;
# 4. Buat ulang tabel servers dengan struktur yang benar
CREATE TABLE servers (
serid int(11) NOT NULL AUTO_INCREMENT,
server_name varchar(255) NOT NULL,
server_ip varchar(45) NOT NULL,
server_type varchar(50) DEFAULT 'openvz',
hostname varchar(255) DEFAULT NULL,
port varchar(10) DEFAULT '4645',
username varchar(255) DEFAULT NULL,
password varchar(255) DEFAULT NULL,
bandwidth varchar(50) DEFAULT '0',
bandwidth_limit varchar(50) DEFAULT '0',
solusvm_ip varchar(45) DEFAULT NULL,
solusvm_key varchar(255) DEFAULT NULL,
PRIMARY KEY (serid)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
# 5. Verifikasi tabel sudah dibuat
DESCRIBE servers;
SHOW TABLE STATUS FROM virtualizor LIKE 'servers';
Metode 5: Resync Data dari node/konfigurasi Virtualizor
Setelah tabel servers dibuat ulang, kamu perlu mengisi kembali data server yang dikelola Virtualizor. Ada beberapa cara:
# Cara 1: Resync dari Virtualizor CLI
cd /usr/local/virtualizor
php bin/virtualizor_resync.php
# Cara 2: Tambah server manual via admin panel
# Buka Virtualizor Admin Panel → Add Server → Isi data server kamu
# Cara 3: Import dari backup konfigurasi lama
# Jika kamu punya file konfigurasi lama, ekstrak data server dari sana
Verifikasi Setelah Fix
Setelah melakukan salah satu metode di atas, pastikan semuanya berjalan normal:
# 1. Cek status MySQL
systemctl status mysqld
# 2. Cek apakah tabel bisa diakses
mysql -u root -p -e "USE virtualizor; SELECT COUNT(*) FROM servers;"
# 3. Cek status Virtualizor service
systemctl status virtualizor
# 4. Buka panel admin di browser, pastikan tidak ada error lagi
# Akses: https://your-ip:4084
# 5. Cek log error Virtualizor
cat /usr/local/virtualizor/logs/error.log | tail -20
Pro Tips & Warnings
Setelah masalah teratasi, langkah pertama yang harus kamu lakukan adalah mengatur auto-backup untuk database virtualizor. Bisa pakai cron job sederhana:
# Backup harian jam 2 pagi
0 2 * * * mysqldump -u root -p'password' virtualizor | gzip > /var/backups/mysql/virtualizor-$(date +%Y%m%d).sql.gz
Kebanyakan kasus
.MYD hilang itu karena disk space habis. Pasang monitoring sederhana:
# Cek disk usage dan kirim alert jika > 85%
DISK=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$DISK" -gt 85 ]; then
echo "Disk usage: ${DISK}%" | mail -s "ALERT: Disk hampir penuh!" admin@domain.com
fi
Ketika disk penuh, MySQL biasanya udah dalam kondisi tidak stabil. Kalau kamu paksa
kill -9 pada proses mysqld, kemungkinan file .MYD yang sedang ditulis akan corrupt. Sebaiknya bersihkan disk space dulu baru restart MySQL secara graceful.Virtualizor versi lama pakai MyISAM, tapi beberapa versi terbaru sudah pakai InnoDB. Kalau kamu pakai InnoDB, masalahnya beda — file yang dicari bukan
.MYD tapi .ibd. Pastikan kamu tahu versi Virtualizor kamu sebelum repair.Troubleshooting Table: Error yang Mungkin Muncul
| Error Tambahan | Penyebab | Solusi |
|---|---|---|
Table 'virtualizor.servers' doesn't exist |
Tabel benar-benar hilang | Buat ulang tabel (Metode 4) |
Can't create/write to file (Errcode: 13) |
Permission salah pada direktori MySQL | chown -R mysql:mysql /var/lib/mysql/virtualizor |
Table is marked as crashed and should be repaired |
Tabel corrupt tapi file masih ada | REPAIR TABLE servers; |
Got error 28 from storage engine |
Disk space habis | Bersihkan disk space, perluas volume |
Lost connection to MySQL server during query |
MySQL timeout atau crash | Restart MySQL, cek max_allowed_packet |
Access denied for user |
Kredensial database salah di konfigurasi Virtualizor | Cek file virt_config.php |
FAQ
Q: Apakah file .MYD yang hilang bisa dipulihkan dari disk?
A: Secara teknis bisa, tapi sangat sulit dan tidak dijamin. Kalau blok disk belum di-overwrite oleh data lain, ada kemungkinan data recovery tool seperti testdisk atau extundelete bisa memulihkan sebagian. Tapi dalam praktiknya, jauh lebih cepat dan aman restore dari backup.
Q: Apakah error ini berbahaya untuk VPS yang sedang berjalan?
A: Error ini hanya mempengaruhi panel Virtualizor — tidak mempengaruhi VPS yang sudah berjalan. VPS tetap jalan normal, kamu cuma nggak bisa manage dari panel. Tapi tentu saja, kamu harus fix secepatnya karena tanpa panel kamu nggak bisa buat VPS baru atau restart yang error.
Q: Kenapa Virtualizor nggak pakai InnoDB yang lebih robust?
A: Virtualizor versi awal memang dirancang pakai MyISAM karena lebih ringan dan cepat untuk operasi read. Tapi MyISAM memang rentan corrupt kalau ada crash. Beberapa versi terbaru sudah support InnoDB. Kalau memungkinkan, pertimbangkan upgrade atau migrasi ke InnoDB.
Q: Bisakah saya cegah error ini terulang lagi?
A: Bisa. Langkah utama: (1) selalu backup database secara berkala, (2) monitor disk space agar nggak pernah penuh, (3) gunakan UPS agar nggak ada power failure mendadak, (4) pertimbangkan migrasi ke InnoDB untuk durability yang lebih baik. Semua langkah ini sudah saya jelaskan di bagian Pro Tips di atas.
Related Issues
- MySQL Crash Recovery — Cara Aman Restore Database
- Disk Full di Server Linux — Penyebab & Solusi Lengkap
- Panduan Install Virtualizor dari Nol
Kesimpulan
Error Could not make the Query dengan file servers.MYD not found itu sebenarnya masalah yang umum terjadi di Virtualizor, terutama untuk server yang sudah lama berjalan. Root cause-nya hampir selalu berkaitan dengan disk space atau MySQL crash.
Yang terpenting adalah: jangan panik, jangan langsung reinstall Virtualizor (ini akan menghapus semua data VPS yang ada), dan selalu mulai dari diagnostic — cek disk, cek filesystem, baru kemudian restore database.
Setelah masalah teratasi, investasikan sedikit waktu untuk setup auto-backup dan disk monitoring. Kedua hal ini akan menyelamatkan kamu di masa depan dari masalah serupa.
Butuh bantuan lebih lanjut? Kamu bisa kunjungi artikel terkait di atas atau hubungi tim teknis kami untuk konsultasi lebih lanjut.