1114 (HY000): तालिका भरी हुई है


114

मैं एक InnoDBतालिका में एक पंक्ति को बस क्वेरी के साथ जोड़ने की कोशिश कर रहा हूं :

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

लेकिन जब मैं इस प्रश्न का प्रयास करता हूं, तो मुझे निम्नलिखित मिलते हैं:

त्रुटि 1114 (HY000): तालिका zip_codesभरी हुई है

कर रहा है a

SELECT COUNT(*) FROM zip_codes

मुझे 188,959 पंक्तियाँ दी गई हैं, जो कि बहुत अधिक नहीं लगती हैं क्योंकि मेरे पास उसी डेटाबेस में 810,635 पंक्तियों के साथ एक और तालिका है।

मैं इसके साथ काफी अनुभवहीन हूं InnoDB engineऔर कभी भी इस मुद्दे पर अनुभव नहीं किया MyISAM। यहां कुछ संभावित समस्याएं क्या हैं?

संपादित करें: यह केवल तब होता है जब zip_codesतालिका में एक पंक्ति जोड़ते हैं ।


क्या त्रुटि तब होती है जब आप किसी तालिका में, या केवल zip_codes को सम्मिलित करने का प्रयास करते हैं?
चाड बर्च

जवाबों:


92

संपादित करें: कॉन्फ़िगरेशन-संबंधित रिज़ॉल्यूशन को हल करने से पहले, यदि आप डिस्क-स्पेस से बाहर नहीं भागते हैं, तो पहले चेक करें

आप इस उदाहरण में, innodb_data_file_pathअपने लिए बहुत कम अधिकतम आकार के लगते हैंmy.cnf

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

आप सभी संयुक्त टेबल में 512MB से अधिक डेटा होस्ट नहीं कर सकते।

हो सकता है कि आप का उपयोग कर एक निर्दोष प्रति तालिका योजना पर स्विच करना चाहिए innodb_file_per_table


C जहां हमें ubuntu में यह my.cnf फाइल मिली

3
@Nad Ubuntu 16.04 में इसका हिस्सा है /etc/mysql/और आंशिक रूप से अतिरिक्त फ़ाइलों में विभाजित है/etc/mysql/conf.d
मार्टिन सी।

मेरा काम करने के लिए innodb_data_file_pathलाइन जोड़ने /etc/mysql/mysql.conf.d/mysqld.cnfऔर फिर से शुरू करने mysqlऔर apache2 सेवाओं के बाद
तिमाह

81

एक और संभावित कारण यह है कि विभाजन भरा हुआ है - यह सिर्फ अब मेरे साथ हुआ है।


1
यह हमेशा जांच करने वाली पहली चीज होनी चाहिए। हमेशा पावर कॉर्ड पर वापस जाएं, मैंने कई बार इस पर ठोकर खाई है।
स्टीवन चर्च

1
आपने मुझे mysql कॉन्फ़िगरेशन बदलने की कोशिश करने में कुछ घंटे बचाए। प्राथमिक विभाजन भरा हुआ था। डेटा विभाजन के लिए mysql डेटाबेस को स्थानांतरित करना था और फिर एक नरम लिंक बनाना था
गणेश कृष्णन

2
df -hचेक डिस्क आकार के लिए उपयोग करें
अमित बेरा

25

आपको एक ही त्रुटि ERROR 1114 (HY000) भी मिलेगी: तालिका '# sql-310a_8867d7f' पूर्ण है

यदि आप एक तालिका में एक इंडेक्स जोड़ने की कोशिश करते हैं जो स्टोरेज इंजन मेमोरी का उपयोग कर रहा है।


मेरे साथ ऐसा हुआ लेकिन ऐसा लगा कि मेरा मुवक्किल गलत वाक्यविन्यास का उपयोग कर रहा है। एक सरल के साथ एक ही सूचकांक को जोड़ने पर ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);यह काम करता है।
thephper

22

आपको INNO_DB तालिकाओं के लिए my.cnf में निर्धारित सीमा टोपी को संशोधित करने की आवश्यकता है। यह मेमोरी सीमा व्यक्तिगत तालिकाओं के लिए सेट नहीं है, यह सभी तालिकाओं के लिए सेट है।

यदि आप मेमोरी को ऑटोटेक्स्टेंड में 512MB तक चाहते हैं

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

यदि आप सीमा नहीं जानते हैं या सीमा टोपी नहीं लगाना चाहते हैं, तो आप इसे इस तरह से संशोधित कर सकते हैं

innodb_data_file_path = ibdata1:10M:autoextend

हमने अपने ddbb को Amazon पर होस्ट किया था और इसे ऑटोएक्स्टेंड के साथ कॉन्फ़िगर किया गया था। लेकिन हमारे पास एक ही समस्या थी जो मुझे लगता है कि कॉन्फ़िगर संग्रहीत सीमा तक पहुंचने के कारण था
बोरबज़

12

यह त्रुटि भी दिखाई देती है यदि विभाजन जिस पर tmpdirरहता है वह भरता है (परिवर्तन तालिका या अन्य के कारण)


11

मेरे मामले में, ऐसा इसलिए था क्योंकि ibdata1 फ़ाइल को होस्ट करने वाला विभाजन भरा हुआ था।


10

आप उस जगह से बाहर भाग सकते हैं जहां विभाजन तालिका (आमतौर पर / var / lib / mysql) संग्रहीत की जाती है या जहां अस्थायी तालिकाओं को संग्रहीत किया जाता है (आमतौर पर / tmp)।

आप चाहते हो सकता है: - सूचकांक निर्माण के दौरान अपने खाली स्थान की निगरानी करें। - एक अलग स्थान पर tmpdir MySQL चर को इंगित करें। इसके लिए सर्वर रिस्टार्ट की आवश्यकता होती है।


8

8GB sql डेटाबेस फ़ाइल आयात करते समय मुझे भी इस त्रुटि का सामना करना पड़ा। मेरे mysql स्थापना ड्राइव की जाँच की। ड्राइव में कोई जगह नहीं बची थी। इसलिए अवांछित वस्तुओं को हटाकर कुछ जगह मिली और मेरे डेटाबेस आयात कमांड को फिर से चलाया। इस बार यह सफल रहा।


7

यदि आप NDBCLUSTER को भंडारण इंजन के रूप में उपयोग करते हैं, तो आपको वृद्धि DataMemoryऔर करनी चाहिएIndexMemory

मैसकल एफक्यूए


6

जब तक आप innodb_file_per_tableविकल्प को सक्षम नहीं करते हैं , InnoDBसभी डेटा को एक फ़ाइल में रखता है, जिसे आमतौर पर कहा जाता हैibdata1

उस फ़ाइल के आकार की जांच करें और जांचें कि आपके पास उस ड्राइव पर पर्याप्त डिस्क स्थान है जिस पर वह रहता है।


5

हमारे पास: SQLSTATE [HY000]: सामान्य त्रुटि: 1114 तालिका 'कैटलॉग_प्रोडक्ट_इंडेक्स_प्राइस_बंडले_सेल_tmp' भरी हुई है

द्वारा हल किया गया:

db का विन्यास संपादित करें:

नैनो /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • पुनः आरंभ करें

1
वे 512M सेटिंग्स खतरनाक हैं। वे जटिल चयन में अस्थायी तालिकाओं के लिए अधिकतम मेमोरी आकार को नियंत्रित करते हैं। यह केवल "प्रति कनेक्शन" नहीं है, बल्कि "प्रति टैम्प टेबल" भी है। तो, वे मान आसानी से रैम से बाहर चलाने का कारण बन सकते हैं।
रिक जेम्स

4

MySQL दस्तावेज़ को उद्धृत करने के लिए।

InnoDB भंडारण इंजन एक टेबलस्पेस के भीतर InnoDB तालिकाओं को बनाए रखता है जिसे कई फ़ाइलों से बनाया जा सकता है। यह एक तालिका को अधिकतम व्यक्तिगत फ़ाइल आकार से अधिक करने की अनुमति देता है। टेबलस्पेस में कच्चे डिस्क विभाजन शामिल हो सकते हैं, जो बहुत बड़ी टेबल की अनुमति देता है। अधिकतम तालिकाओं का आकार 64TB है।

यदि आप InnoDB तालिकाओं का उपयोग कर रहे हैं और InnoDB तालिकाओं में कमरे से बाहर भाग रहे हैं। इस मामले में, समाधान InnoDB तालिकाओं का विस्तार करना है। देखें खंड 13.2.5, ["जोड़ना, निकालना या आकार बदलना InnoDB डेटा और लॉग फ़ाइलें"]]


4

मेरे मामले में, यह सिर्फ इसलिए कि mysql सर्वर एक एप्लिकेशन के साथ एक साथ चलता है, जो बहुत सारे लॉग लिखते हैं कि डिस्क भरी हुई है।

आप देख सकते हैं कि डिस्क में पर्याप्त स्थान उपयोग है या नहीं

df -h

यदि डिस्क उपयोग प्रतिशत 100% है, तो आप इस कमांड का उपयोग यह पता लगाने के लिए कर सकते हैं कि कौन सी निर्देशिका बहुत बड़ी है

du -h -d 1 /

4

DOCKER USERS: यह भी तब होता है जब आपने अपने Docker छवि आकार का लगभग 90% हिट किया हो सीमा (लगता है कि कैशिंग या ऐसा करने के लिए 10% की आवश्यकता है)। शब्दांकन भ्रामक है, क्योंकि इसका मतलब है कि डिस्क स्पेस डॉकर की मात्रा मूल रूप से सब कुछ के लिए उपयोग कर सकती है।

ठीक करने के लिए, अपने डॉकर डेस्कटॉप सेटिंग्स> डिस्क> पर जाएं स्लाइडर को थोड़ा और दाईं ओर ले जाएं> लागू करें।

यहां छवि विवरण दर्ज करें


2

CentOS 7 पर केवल MySQL सेवा को रोकना और शुरू करना मेरे लिए यह तय किया गया है।

sudo service mysql stop

sudo service mysql start


अजीब तरह से यह मेरे लिए भी काम किया .... कोई विभाजन नहीं था जो 80% से अधिक पूर्ण थे और बस इसे फिर से शुरू करना था।
n0nag0n

2

मुझे कम डिस्क स्थान के कारण समान समस्या का सामना करना पड़ा। और विभाजन जो ibdata1 फ़ाइल की मेजबानी कर रहा है जो कि InnoDB बुनियादी ढांचे के लिए सिस्टम टेबलस्पेस भरा हुआ था।


2

मैं इस मुद्दे का सामना कर रहा था ... मेरे मामले में, मैं अपने समर्पित सर्वर पर भंडारण से बाहर चला जाऊंगा। जांचें कि यदि सब कुछ विफल रहता है और डिस्क स्थान बढ़ाने या अवांछित डेटा या फ़ाइलों को हटाने पर विचार करें।


1

मेरे मामले में सर्वर मेमोरी भरी हुई थी, इसलिए DB अस्थायी डेटा नहीं लिख सकता था। इसे हल करने के लिए आपको बस अपने ड्राइव पर कुछ जगह बनानी होगी।


1

मैंने इस समस्या को योनि VM को उपलब्ध स्मृति की मात्रा बढ़ाकर तय किया जहां डेटाबेस स्थित था।


1

मेरे मामले में, मैं एक परिवर्तन तालिका कमांड चलाने का प्रयास कर रहा था और उपलब्ध डिस्क स्थान तालिका के आकार से कम था। एक बार, मैंने डिस्क स्थान बढ़ाया जिससे समस्या दूर हो गई।



-1

यह खुले लेनदेन की संख्या के लिए InnoDB सीमा भी हो सकती है:

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

1024 लेन-देन पर, जिनके पास पूर्ववत् रिकॉर्ड हैं (जैसा कि किसी भी डेटा को संपादित किया गया है), InnoDB काम करने में विफल रहेगा


उत्तर दिनांकित है।
इवान कैरोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.