Saya mendapat kesalahan berikut dari kueri MySQL.
#126 - Incorrect key file for table
Saya bahkan belum menyatakan kunci untuk tabel ini, tetapi saya memiliki indeks. Apakah ada yang tahu apa masalahnya?
mysql
mysql-error-126
Brian
sumber
sumber
REPAIR TABLE
dan masih mendapatkan ini, ditambah masih ada ruang,/tmp
Anda mungkin ingin mencoba me-reboot server.Jawaban:
Setiap kali ini terjadi, menurut pengalaman saya, itu adalah disk penuh.
EDIT
Perlu juga dicatat bahwa ini dapat disebabkan oleh ramdisk yang penuh saat melakukan hal-hal seperti mengubah tabel besar jika Anda memiliki ramdisk yang dikonfigurasi. Anda dapat sementara mengomentari baris ramdisk untuk mengizinkan operasi semacam itu jika Anda tidak dapat meningkatkan ukurannya.
sumber
/tmp
adalah sistem file tmpfs kecil dan mysql kehabisan ruang untuk menulis tabel temp di sana. Saya harus mengaturtmpdir
variabel config seperti yang disebutkan di mysql.comPertama-tama, Anda harus tahu bahwa kunci dan indeks adalah sinonim di MySQL. Jika Anda melihat dokumentasi tentang Sintaks CREATE TABLE , Anda dapat membaca:
Sekarang, jenis kesalahan yang Anda dapatkan bisa disebabkan oleh dua hal:
Dalam kasus pertama, Anda akan melihat bahwa menambahkan batas ke kueri Anda mungkin menyelesaikan masalah untuk sementara. Jika itu berhasil untuk Anda, Anda mungkin memiliki
tmp
folder yang terlalu kecil untuk ukuran kueri yang Anda coba lakukan. Anda kemudian dapat memutuskan atautmp
memperbesar, atau membuat kueri Anda lebih kecil! ;)Terkadang,
tmp
cukup besar tetapi masih penuh, Anda perlu melakukan pembersihan manual dalam situasi ini.Dalam kasus kedua, ada masalah aktual dengan data MySQL. Jika Anda dapat memasukkan kembali data dengan mudah, saya akan menyarankan untuk hanya menjatuhkan / membuat ulang tabel, dan memasukkan kembali data. Jika Anda tidak bisa, Anda dapat mencoba memperbaiki meja di tempatnya dengan meja REPAIR . Ini adalah proses yang umumnya panjang dan mungkin akan gagal.
Lihat pesan kesalahan lengkap yang Anda dapatkan:
Itu menyebutkan dalam pesan bahwa Anda dapat mencoba memperbaikinya. Juga, jika Anda melihat FILEPATH aktual yang Anda dapatkan, Anda dapat mengetahui lebih lanjut:
jika itu seperti
/tmp/#sql_ab34_23f
itu berarti MySQL perlu membuat tabel sementara karena ukuran kueri. Ini menyimpannya di / tmp, dan tidak ada cukup ruang di / tmp Anda untuk tabel sementara itu.jika itu berisi nama tabel sebenarnya, itu berarti tabel ini kemungkinan besar rusak dan Anda harus memperbaikinya.
Jika Anda mengidentifikasi bahwa masalah Anda adalah dengan ukuran / tmp, baca saja jawaban ini untuk pertanyaan serupa untuk perbaikan: MySQL, Kesalahan 126: File kunci salah untuk tabel .
sumber
Mengikuti petunjuk ini memungkinkan saya membuat ulang direktori tmp saya dan memperbaiki masalah:
Tampilkan semua sistem file dan penggunaan disknya dalam bentuk yang dapat dibaca manusia:
Temukan proses yang membuka file
/tmp
Kemudian umount
/tmp
dan/var/tmp
:Kemudian hapus file partisi yang rusak:
Kemudian buat yang baru yang bagus:
Perhatikan bahwa dengan mengedit skrip Perl securetmp Anda dapat mengatur sendiri ukuran direktori tmp secara manual, namun hanya menjalankan skrip tersebut meningkatkan ukuran direktori tmp di server kami dari sekitar 450MB menjadi 4,0GB.
sumber
Kesalahan # 126 biasanya terjadi ketika Anda mendapat tabel yang rusak. Cara terbaik untuk mengatasinya adalah dengan melakukan perbaikan. Artikel ini mungkin bisa membantu:
http://dev.mysql.com/doc/refman/5.0/en/repair-table.html
sumber
Aku punya kesalahan ini ketika saya set
ft_min_word_len = 2
dimy.cnf
, yang menurunkan panjang kata minimal dalam indeks teks lengkap untuk 2, dari default 4.Memperbaiki tabel memperbaiki masalah.
sumber
Coba gunakan batas dalam kueri Anda. Itu karena disk penuh seperti yang dikatakan oleh @Monsters X.
Saya juga menghadapi masalah ini dan memecahkannya dengan batas permintaan, karena ribuan catatan ada di sana. Sekarang bekerja dengan baik :)
sumber
Saya tahu bahwa ini adalah topik lama tetapi tidak ada solusi yang disebutkan berhasil untuk saya. Saya telah melakukan hal lain yang berhasil:
Kamu butuh:
sumber
sumber
Saya memperbaiki masalah ini dengan:
Semoga membantu
sumber
table
ENGINE = MyISAM;Pergi ke
/etc/my.cnf
dan beri komentartmpfs
Ini memperbaiki masalah.
Saya menjalankan perintah yang disarankan dalam jawaban lain dan meskipun direktorinya kecil, itu kosong, jadi bukan ruang yang menjadi masalah.
sumber
Coba jalankan perintah perbaikan untuk setiap tabel yang terlibat dalam kueri.
Gunakan administrator MySQL, buka Katalog -> Pilih Katalog Anda -> Pilih tabel -> Klik tombol Pemeliharaan -> Perbaikan -> Gunakan FRM.
sumber
Sekarang jawaban lain memecahkannya untuk saya. Ternyata mengganti nama kolom dan indeks dalam kueri yang sama menyebabkan kesalahan.
Tidak bekerja:
Pekerjaan (2 pernyataan):
Ini ada di MariaDB 10.0.20. Tidak ada kesalahan dengan kueri yang sama di MySQL 5.5.48.
sumber
Kemudian ada kesalahan:
mysql> tabel perbaikan f_scraper_banner_details;
Ini berhasil untuk saya
sumber
Masalah saya berasal dari kueri yang buruk. Saya mereferensikan tabel di FROM yang tidak direferensikan di SELECT.
contoh:
, users u
itulah yang menyebabkan masalah bagi saya. Menghapus itu memecahkan masalah.Untuk referensi, ini ada di lingkungan dev CodeIgniter.
sumber
Saya mendapat pesan ini saat menulis ke tabel setelah mengurangi ft_min_word_len (panjang kata teks lengkap min). Untuk mengatasinya, buat ulang indeks dengan memperbaiki tabel.
sumber
mysqlcheck -r -f -uroot -p --use_frm db_name
biasanya akan berhasil
sumber