1114 (HY000): Masa dolu


114

InnoDBBasit bir sorgu ile bir tabloya satır eklemeye çalışıyorum :

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

Ancak bu sorguyu denediğimde aşağıdakileri alıyorum:

HATA 1114 (HY000): Tablo zip_codesdolu

Yapmak

SELECT COUNT(*) FROM zip_codes

bana 188.959 satır veriyor, bu aynı veritabanında 810.635 satırlık başka bir tablom olduğu düşünülürse çok fazla görünmüyor.

InnoDB engineBu konuda oldukça deneyimsizim ve bu sorunu hiç yaşamadım MyISAM. Buradaki olası sorunlardan bazıları nelerdir?

DÜZENLEME: Bu yalnızca zip_codestabloya bir satır eklerken gerçekleşir .


Hata, herhangi bir tabloya mı yoksa yalnızca zip_codes'a bir tane eklemeye çalıştığınızda mı ortaya çıkıyor?
Chad Birch

Yanıtlar:


92

DÜZENLEME: Yapılandırmayla ilgili çözüme geçmeden önce, ilk olarak, disk alanınızın bitip bitmediğini kontrol edin.

Eğer bir çok düşük maksimum boyutu var gibi innodb_data_file_pathGözlerinde farklı my.cnf, bu örnek olarak

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

Tüm innodb tablolarında birleştirilmiş 512 MB'tan fazla veri barındıramazsınız.

Belki kullanarak masa başına innodb şemasına geçmelisiniz innodb_file_per_table.


C Bu my.cnf dosyasını

3
@Nadh Ubuntu 16.04'te /etc/mysql/,/etc/mysql/conf.d
Martin C'nin bir

Mine, innodb_data_file_pathhattı ve hizmetlerine ekledikten /etc/mysql/mysql.conf.d/mysqld.cnfve yeniden başlattıktan sonra çalıştımysqlapache2
Timmah

81

Bir başka olası neden, bölümün dolu olmasıdır - bu şimdi bana olan şey.


1
Bu her zaman kontrol edilecek ilk şey olmalıdır. Her zaman güç kablosuna geri dönün, buna birçok kez rastladım.
Steven Kilisesi

1
Mysql yapılandırmasını değiştirmeye çalışırken beni birkaç saat kurtardın. Birincil bölüm doluydu. Mysql veritabanını veri bölümüne taşımak ve ardından yumuşak bir bağlantı oluşturmak zorundaydı
Ganesh Krishnan

2
df -hdisk boyutunu kontrol etmek için kullanın
Amit Bera

25

Ayrıca aynı hatayı ERROR 1114 (HY000) alacaksınız: '# sql-310a_8867d7f' tablosu dolu

depolama motorunu kullanan bir tabloya bir dizin eklemeye çalışırsanız MEMORY.


Bu bana oldu ama istemcim yanlış sözdizimi kullanıyor gibi görünüyordu. Aynı dizini basit bir şekilde eklerken ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);işe yaradı.
thephper

22

INNO_DB tabloları için my.cnf'de ayarlanan limit sınırını değiştirmeniz gerekir. Bu bellek limiti tek tek tablolar için ayarlanmamıştır, birleştirilmiş tüm tablolar için ayarlanmıştır.

Belleğin otomatik olarak 512MB'ye uzatılmasını istiyorsanız

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

Sınırı bilmiyorsanız veya bir sınır sınırı koymak istemiyorsanız, bunu şu şekilde değiştirebilirsiniz

innodb_data_file_path = ibdata1:10M:autoextend

Ddbb'mizi Amazon'da barındırdık ve otomatik uzatma ile yapılandırıldı. Ancak, yapılandırılmış depolanmış sınıra ulaşmaktan kaynaklandığını düşündüğüm aynı sorunu
yaşadık

12

Bu hata, tmpdirbulunduğu bölümün dolması durumunda da görünür (bir alter tablosu veya diğer


11

Benim durumumda bunun nedeni ibdata1 dosyasını barındıran bölümün dolu olmasıydı.


10

Ya mysql tablolarının depolandığı bölümde (genellikle / var / lib / mysql) veya geçici tabloların depolandığı yerde (genellikle / tmp) alanınız tükeniyor olabilir.

Şunları isteyebilirsiniz: - dizin oluşturma sırasında boş alanınızı izlemek. - tmpdir MySQL değişkenini farklı bir konuma yönlendirin. Bu, sunucunun yeniden başlatılmasını gerektirir.


8

Ben de 8GB sql veritabanı dosyasını içe aktarırken bu hatayla karşılaştım. Mysql kurulum sürücümü kontrol ettim. Sürücüde hiç yer kalmamıştı. Bu yüzden istenmeyen öğeleri kaldırarak biraz alan aldım ve veritabanı içe aktarma komutumu yeniden çalıştırdım. Bu sefer başarılı oldu.


7

NDBCLUSTER'ı depolama motoru olarak kullanıyorsanız, DataMemoryve artırmalısınız IndexMemory.

Mysql FQA


6

innodb_file_per_tableSeçeneği etkinleştirmediyseniz , InnoDBtüm verileri genellikle adı verilen tek bir dosyada tutar ibdata1.

Bu dosyanın boyutunu kontrol edin ve bulunduğu sürücüde yeterli disk alanı olup olmadığını kontrol edin.


5

biz vardı: SQLSTATE [HY000]: Genel hata: 1114 'catalog_product_index_price_bundle_sel_tmp' tablosu dolu

çözen:

db'nin yapılandırmasını düzenle:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • db'yi yeniden başlat

1
Bu 512M ayarları tehlikelidir. Karmaşık seçimlerdeki geçici tablolar için maksimum bellek boyutunu kontrol ederler. Bu sadece "bağlantı başına" değil, aynı zamanda "tmp tablosu başına" dır. Dolayısıyla, bu değerler kolayca RAM'inizin bitmesine neden olabilir.
Rick James

4

MySQL Belgelerinden alıntı yapmak için.

InnoDB depolama motoru, InnoDB tablolarını birkaç dosyadan oluşturulabilen bir tablo alanı içinde tutar. Bu, bir tablonun maksimum bireysel dosya boyutunu aşmasına izin verir. Tablo alanı, çok büyük tablolara izin veren ham disk bölümlerini içerebilir. Maksimum tablo alanı boyutu 64TB'dir.

InnoDB tabloları kullanıyorsanız ve InnoDB tablo alanında yer kalmadıysa. Bu durumda çözüm InnoDB tablo alanını genişletmektir. Bkz. Bölüm 13.2.5, ["InnoDB Verilerini ve Günlük Dosyalarını Ekleme, Kaldırma veya Yeniden Boyutlandırma".]


4

benim durumumda, mysql sunucusunun bir uygulama ile birlikte çalışması ve diskin dolu olduğuna dair çok fazla günlük yazmasıdır.

diskte yeterli alan olup olmadığını kontrol edebilirsiniz

df -h

Disk kullanım yüzdesi% 100 ise, hangi dizinin çok büyük olduğunu bulmak için bu komutu kullanabilirsiniz.

du -h -d 1 /

4

DOCKER KULLANICILARI: Bu, Docker görüntü boyutu sınırınızın yaklaşık% 90'ına ulaştığınızda da olur (önbelleğe almak için% 10 gerekli gibi görünüyor). İfadeler kafa karıştırıcı, çünkü bu, Docker'ın temelde her şey için kullanabileceği disk alanı miktarı anlamına geliyor.

Düzeltmek için Docker masaüstü ayarlarınıza gidin> Disk> kaydırıcıyı biraz daha sağa kaydırın> Uygula.

görüntü açıklamasını buraya girin


2

CentOS 7'de MySQL hizmetini durdurmak ve başlatmak bunu benim için çözdü.

sudo service mysql stop

sudo service mysql start


Garip bir şekilde bu benim için de çalıştı ....% 80'den fazla dolu olan herhangi bir bölüm yoktu ve sadece yeniden başlatmak sorunu düzeltti.
n0nag0n

2

Düşük disk alanı nedeniyle aynı sorunla karşılaştım. Ve InnoDB altyapısı için sistem tablo alanı olan ibdata1 dosyasını barındıran bölüm doluydu.


2

Bu sorunu yaşıyordum ... benim durumumda, özel sunucumda depolama alanı bitiyor. Her şeyin başarısız olup olmadığını kontrol edin ve disk alanını artırmayı veya istenmeyen verileri veya dosyaları kaldırmayı düşünün.


1

Benim durumumda sunucu belleği doluydu, bu nedenle DB geçici verileri yazamadı. Çözmek için sürücünüzde bir yer açmanız yeterlidir.


1

Veritabanının bulunduğu serseri VM için kullanılabilir bellek miktarını artırarak bu sorunu çözdüm.


1

Benim durumumda, bir tabloyu değiştir komutu çalıştırmaya çalışıyordum ve kullanılabilir disk alanı tablonun boyutundan daha azdı. Bir defasında disk alanını artırdım, sorun ortadan kalktı.



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.