• Indonesian
  • English
  • Fix Error “Could not make the Query” Virtualizor — File

    Kecepatan:

    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.

    💡 Pengalaman Nyata: Pernah suatu kali, client saya tiba-tiba telepon bilang panel Virtualizor error. Setelah saya cek, ternyata file .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
    ⚠️ PERINGATAN: Jangan jalankan 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.

    ⚠️ PERINGATAN KEAMANAN: Backup Sebelum Melanjutkan

    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';
    ⚠️ PENTING: Struktur tabel di atas adalah contoh umum. Struktur aktual bisa berbeda tergantung versi Virtualizor kamu. Cek file SQL instalasi Virtualizor kamu yang asli untuk struktur yang tepat. Biasanya ada di direktori instalasi Virtualizor atau di backup dump yang pernah kamu buat.

    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

    💡 Tip #1: Aktifkan Auto-Backup MySQL
    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
    💡 Tip #2: Monitoring Disk Space
    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
    ⚠️ Warning: Jangan Pernah Restart MySQL Paksa Saat Disk Full
    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.
    ⚠️ Warning: Engine MyISAM vs InnoDB
    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

    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.