2014-11-17 7 views
5

मुझे MySQL के साथ एक अजीब समस्या है, मैं एक टेबल नहीं बना सकता। तालिका मौजूद थी, यह एक नौकरी का हिस्सा है जो हर दिन एक स्टेजिंग टेबल पर लोड होता है, फिर अंत में उस तालिका को छोटा करता है। महीनों के बाद, तालिका गायब हो गया (शायद किसी को है, यह गिरा कोई फर्क नहीं पड़ता) और मैं इसे फिर से बनाने के लिए गया था, लेकिन मैं इस त्रुटि मिलती है:MySQL: तालिका नहीं बना सकता: errno -1

Level Code Message 
Error 1005 Can't create table 'apps.raw_appsites_stage' (errno: -1) 

मैं मेज नहीं छोड़ सकता है या यह फिर से बनाना। लेकिन यदि तालिका का नाम बदलता है तो मैं इसे बना सकता हूं।
तो ऐसा लगता है कि तालिका गिरा दी गई है लेकिन नामस्थान अभी भी आरक्षित है या बैक-एंड पर लिम्बो में फंस गया है।

यहाँ DDL वह काम नहीं करता है:

create table raw_appsites_stage(t int); 

लेकिन इस DDL करता है काम:

create table raw_appsites_stage_1(t int); 

मैं एक आरडीएस उदाहरण उपयोग कर रहा हूँ तो मैं करने के लिए बहुत पहुँच नहीं है सर्वर स्वयं यहाँ संस्करण जानकारी है:

Variable_name Value 
innodb_version 5.5.40 
protocol_version 10 
slave_type_conversions 
version 5.5.40-log 
version_comment Source distribution 
version_compile_machine x86_64 
version_compile_os Linux 

मैं कैसे देख सकते हैं, जहां इस नाम पर किया जा रहा है और क्यों यह नहीं दूँगी मुझे छोड़ या इस नाम के साथ एक तालिका बनाने के?

अद्यतन मुझे लगता है कि मेज पर एक का नाम बदलने की कोशिश की है और एक नया त्रुटि मैंने पहले कभी नहीं देखा है मिल गया:

Can't find file: './apps/raw_appsites_stage.frm' (errno: 2) 

तो यह निश्चित रूप से बैक-एंड पर कुछ अजीब है, लेकिन यह किया जा रहा है और आरडीएस उदाहरण के लिए मुझे मशीन ओएस तक पहुंच नहीं है। किसी को इसके लिए एक फिक्स पता है? क्या मुझे एडब्ल्यूएस समर्थन पर इंतजार करना होगा?

धन्यवाद

+1

कच्चे_appsites_stage (टी int) मौजूद नहीं है, तो तालिका बनाएं '; –

+0

@juergend: मुझे उस आदेश को चलाने में सटीक त्रुटि मिलती है। मुद्दा यह नहीं है कि मैं इसे बनाने की कोशिश कर रहा हूं जो पहले से मौजूद है। मुद्दा यह है कि तालिका-नाम limbo में है, MySQL का कहना है कि उस नाम के साथ कोई तालिका मौजूद नहीं है, लेकिन मुझे उस नाम के साथ एक नई तालिका बनाने नहीं देगा। –

+0

यदि आप raw_appsites_stage से * चुनते हैं तो क्या होता है? यदि मौजूद है तो कच्ची_appsites_stage –

उत्तर

3

ठीक है, अगर तुम InnoDB इंजन के रूप में प्रयोग कर रहे हैं। किसी भी तरह, आपने raw_appsites_stage.frm और raw_appsites_stage.ibd फ़ाइलों को खो दिया है। डेटा डिक्शनरी में अभी भी उस तालिका के लिए एक प्रविष्टि है।

अब आप टेबल नहीं छोड़ सकते क्योंकि mysqld पहले .frm फ़ाइल को देखेगा।

तुम कोशिश कर सकते या तो check और repair table raw_appsites_stage (यदि नहीं InnoDB)

या, mysqldump द्वारा बैकअप ibdata1 तो ibdata1 हटा सकते हैं और बहाल। विवरण Here

+3

धन्यवाद, अच्छी जानकारी। दुर्भाग्यवश (?) मैं इनोडब का उपयोग कर रहा हूं इसलिए मैं "मरम्मत तालिका" का उपयोग नहीं कर सकता, और "चेक तालिका raw_appsites_stage;" लौटा "त्रुटि: तालिका 'apps.raw_appsites_stage' मौजूद नहीं है", और चूंकि यह आरडीएस है, इसलिए मैंने आपके द्वारा पोस्ट किए गए बहुत विस्तृत लिंक में वर्णित फाइल सिस्टम तक नहीं पहुंच सकते हैं। –

संबंधित मुद्दे