1114 (HY000): Tabel penuh

114

Saya mencoba menambahkan baris ke InnoDBtabel dengan kueri sederhana:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

Tetapi ketika saya mencoba kueri ini, saya mendapatkan yang berikut:

ERROR 1114 (HY000): Tabel zip_codespenuh

Melakukan a

SELECT COUNT(*) FROM zip_codes

memberi saya 188.959 baris, yang sepertinya tidak terlalu banyak mengingat saya memiliki tabel lain dengan 810.635 baris dalam database yang sama.

Saya cukup berpengalaman dengan InnoDB enginedan tidak pernah mengalami masalah ini dengan MyISAM. Apa sajakah masalah potensial di sini?

EDIT: Ini hanya terjadi saat menambahkan baris ke zip_codestabel.

Wickethewok
sumber
Apakah kesalahan terjadi saat Anda mencoba memasukkan ke dalam tabel apa pun, atau hanya kode zip?
Chad Birch

Jawaban:

92

EDIT: Periksa terlebih dahulu, jika Anda tidak kehabisan ruang disk, sebelum menyelesaikan ke resolusi terkait konfigurasi.

Anda tampaknya memiliki ukuran maksimum yang terlalu rendah untuk innodb_data_file_pathAnda my.cnf, dalam contoh ini

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

Anda tidak dapat menghosting lebih dari 512MB data di semua tabel innodb yang digabungkan.

Mungkin Anda harus beralih ke skema innodb-per-table menggunakan innodb_file_per_table.

Martin C.
sumber
C di mana kita mendapatkan file my.cnf ini di ubuntu
3
@Nadh Di Ubuntu 16.04 itu bagian dari /etc/mysql/dan sebagian dipecah menjadi file tambahan di/etc/mysql/conf.d
Martin C.
Saya bekerja setelah menambahkan innodb_data_file_pathbaris untuk /etc/mysql/mysql.conf.d/mysqld.cnfdan me-restart mysqldan apache2 jasa
Timmah
81

Alasan lain yang mungkin adalah partisi penuh - inilah yang terjadi pada saya sekarang.

maaartinus
sumber
1
Ini harus selalu menjadi hal pertama yang diperiksa. Selalu kembali ke kabel daya, saya telah menemukan ini berkali-kali.
Gereja Steven
1
Anda menghemat beberapa jam saya mencoba mengubah konfigurasi mysql. Partisi utama sudah penuh. Harus memindahkan database mysql ke partisi data dan kemudian membuat tautan lunak
Ganesh Krishnan
2
gunakan df -huntuk memeriksa ukuran disk
Amit Bera
25

Anda juga akan mendapatkan kesalahan yang sama ERROR 1114 (HY000): Tabel '# sql-310a_8867d7f' penuh

jika Anda mencoba menambahkan indeks ke tabel yang menggunakan mesin penyimpanan MEMORY.

Kartu hijau
sumber
Ini terjadi pada saya tetapi sepertinya klien saya menggunakan sintaks yang salah. Saat menambahkan indeks yang sama dengan yang sederhana ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);itu berhasil.
thephper
22

Anda perlu mengubah batas batas yang ditetapkan di my.cnf untuk tabel INNO_DB. Batas memori ini tidak ditetapkan untuk tabel individu, ini ditetapkan untuk semua tabel yang digabungkan.

Jika Anda ingin memori diperpanjang secara otomatis hingga 512MB

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

Jika Anda tidak mengetahui batasannya atau tidak ingin memberi batasan, Anda dapat memodifikasinya seperti ini

innodb_data_file_path = ibdata1:10M:autoextend
Daniel Luca CleanUnicorn
sumber
Kami menghosting ddbb kami di Amazon dan dikonfigurasi dengan autoextend. Tetapi kami memiliki masalah yang sama yang saya asumsikan karena mencapai batas tersimpan yang dikonfigurasi
borjab
12

Kesalahan ini juga muncul jika partisi tempat tmpdirtinggal terisi (karena tabel perubahan atau lainnya

fimbulvetr.dll
sumber
11

Dalam kasus saya, ini karena partisi yang menghosting file ibdata1 sudah penuh.

cakrawala
sumber
10

Anda mungkin kehabisan ruang baik di partisi tempat tabel mysql disimpan (biasanya / var / lib / mysql) atau di tempat tabel sementara disimpan (biasanya / tmp).

Anda mungkin ingin: - memantau ruang kosong Anda selama pembuatan indeks. - arahkan variabel tmpdir MySQL ke lokasi lain. Ini membutuhkan restart server.

Julio
sumber
8

Saya juga menghadapi kesalahan ini saat mengimpor file database 8GB sql. Memeriksa drive instalasi mysql saya. Tidak ada ruang tersisa di drive. Jadi dapatkan beberapa ruang dengan menghapus item yang tidak diinginkan dan jalankan kembali perintah impor database saya. Kali ini berhasil.

Arun Kumar
sumber
7

Jika Anda menggunakan NDBCLUSTER sebagai mesin penyimpanan, Anda harus meningkatkan DataMemorydan IndexMemory.

Mysql FQA

metdos
sumber
6

Kecuali Anda mengaktifkan innodb_file_per_tableopsi, InnoDBsimpan semua data dalam satu file, biasanya disebut ibdata1.

Periksa ukuran file itu dan periksa apakah Anda memiliki cukup ruang disk di drive tempatnya berada.

Quassnoi
sumber
5

kami memiliki: SQLSTATE [HY000]: Kesalahan umum: 1114 Tabel 'catalog_product_index_price_bundle_sel_tmp' penuh

diselesaikan dengan:

edit konfigurasi db:

nano /etc/my.cnf

tmp_table_size = 256 juta max_heap_table_size = 256 juta

  • restart db
Sition
sumber
1
Pengaturan 512M itu berbahaya. Mereka mengontrol ukuran memori maksimal untuk tabel temp dalam pemilihan yang kompleks. Ini bukan hanya "per koneksi", tetapi juga "per tabel tmp". Jadi, nilai-nilai tersebut dapat dengan mudah menyebabkan Anda kehabisan RAM.
Rick James
4

Mengutip Dokumen MySQL.

Mesin penyimpanan InnoDB mengelola tabel InnoDB dalam ruang tabel yang dapat dibuat dari beberapa file. Ini memungkinkan tabel melebihi ukuran file individu maksimum. Ruang tabel dapat menyertakan partisi disk mentah, yang memungkinkan tabel yang sangat besar. Ukuran tablespace maksimum adalah 64TB.

Jika Anda menggunakan tabel InnoDB dan kehabisan ruang di tablespace InnoDB. Dalam kasus ini, solusinya adalah memperluas tablespace InnoDB. Lihat Bagian 13.2.5, [“Menambahkan, Menghapus, atau Mengubah Ukuran Data dan File Log InnoDB”.]

Ólafur Waage
sumber
4

dalam kasus saya, itu hanya karena server mysql berjalan bersama dengan aplikasi, yang menulis terlalu banyak log sehingga disk penuh.

Anda dapat memeriksa apakah disk memiliki penggunaan ruang yang cukup

df -h

jika persentase penggunaan disk 100%, Anda dapat menggunakan perintah ini untuk menemukan direktori mana yang terlalu besar

du -h -d 1 /
Kai
sumber
4

PENGGUNA DOCKER: Ini juga terjadi ketika Anda telah mencapai sekitar 90% dari batas ukuran gambar Docker Anda (sepertinya 10% diperlukan untuk caching atau lebih). Kata-katanya membingungkan, karena ini berarti jumlah ruang disk yang dapat digunakan Docker untuk semuanya.

Untuk memperbaikinya, buka pengaturan desktop Docker> Disk> gerakkan slider sedikit lebih ke kanan> Terapkan.

masukkan deskripsi gambar di sini

Sliq
sumber
2

Di CentOS 7 cukup hentikan dan mulai layanan MySQL, perbaiki ini untuk saya.

sudo service mysql stop

sudo service mysql start

crmpicco.dll
sumber
Anehnya ini bekerja untuk saya juga .... Tidak memiliki partisi yang lebih besar dari 80% penuh dan hanya memulai ulang memperbaikinya.
n0nag0n
2

Saya menghadapi masalah yang sama karena ruang disk yang rendah. Dan partisi yang menghosting file ibdata1 yang merupakan tablespace sistem untuk infrastruktur InnoDB sudah penuh.

Saveendra Ekanayake
sumber
2

Saya mengalami masalah ini ... dalam kasus saya, saya kehabisan penyimpanan di server khusus saya. Periksa apakah semuanya gagal dan pertimbangkan untuk menambah ruang disk atau menghapus data atau file yang tidak diinginkan.

NotJay
sumber
1

Dalam kasus saya, memori server penuh sehingga DB tidak dapat menulis data temp. Untuk mengatasinya, Anda hanya perlu membuat beberapa tempat di drive Anda.

Pierre-Yves Guillemet
sumber
1

Saya memperbaiki masalah ini dengan meningkatkan jumlah memori yang tersedia untuk VM gelandangan tempat database berada.

yvoloshin
sumber
1

Dalam kasus saya, saya mencoba menjalankan perintah alter table dan ruang disk yang tersedia kurang dari ukuran tabel. Sekali, saya menambah ruang disk, masalahnya hilang.

Pratik Singhal
sumber
1

Disk ini penuh di / var / www / mysql

wukong
sumber
-1

Ini juga bisa menjadi batas InnoDB untuk jumlah transaksi terbuka:

http://bugs.mysql.com/bug.php?id=26590

pada 1024 transaksi, yang memiliki catatan urung (seperti dalam, mengedit data apa pun), InnoDB akan gagal berfungsi


sumber
Jawabannya sudah kuno.
Evan Carroll