त्रुटि: टेबल xxx के लिए टेबलस्पेस मौजूद है। कृपया आयात से पहले टेबलस्पेस को खारिज कर दें


134

मैं MySQL के लिए काफी नया हूं और मुझे एक बहुत ही दिलचस्प त्रुटि मिल रही है, जिस पर मुझे Google और स्टैकओवरफ्लो खोज के माध्यम से कोई मदद नहीं मिल रही है।

मैं MacOS 10.8.3 पर MySQL 5.6.10 का स्थानीय सर्वर चला रहा हूं और MySQL के लिए Navicat अनिवार्य के माध्यम से अपने डेटाबेस का प्रबंधन करता हूं।

मुझे जो त्रुटि मिलती है, वह यह है कि मेरे डेटाबेस को चलाने और प्रबंधित करने के बाद कुछ दिनों / हफ्तों के लिए कुछ ठीक हो जाता है (यह अपूर्ण रूप से प्रकट होता है) कुछ ऐसे तालिकाओं को हटा दें जिन्हें मैंने नेविट के भीतर से प्रश्नों का उपयोग करके बनाया था।

जब मैं इन तालिकाओं का उपयोग करके प्रश्नों को चलाने की कोशिश करता हूं, तो नविकट मुझे चेतावनी देता है कि विशेष तालिका मौजूद नहीं है। अब तक अच्छा - यहाँ अच्छा हिस्सा आता है:

जब मैं तालिका बनाने की कोशिश करता हूं, उदाहरण के लिए "अस्थायी" नाम, जो पहले था, मुझे निम्नलिखित त्रुटि संदेश मिलता है:

Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.

हालाँकि, यदि मैं तालिका को छोड़ने का प्रयास करता हूँ, या इस तालिका का उपयोग करने के लिए टेबलस्पेस को छोड़ने का प्रयास करता हूँ

DROP TABLE temp;
ALTER TABLE temp DISCARD TABLESPACE;

मुझे निम्न त्रुटि संदेश मिले:

Error : Unknown table 'database.temp'
Error : Table 'database.temp' doesn't exist

तो इसका मतलब है कि मुझे टेबल स्पेस छोड़ने की सलाह दी जा रही है लेकिन जब मैं ऐसा करने की कोशिश करता हूं तो टेबल मौजूद नहीं होती है। क्या यह संभव है कि एक अलग स्थान पर इस तालिका के कुछ प्रकार के अवशेष हैं जहां DISCARD क्वेरी जाँच नहीं कर रही है? और क्या किसी को इस बात का अंदाजा है कि यह सब क्या हो सकता है - पूरी तरह से बेतरतीब ढंग से जैसा लगता है?

जैसा कि मैंने कहा, मैं इस विषय के लिए नया हूँ और बहुत अधिक क्लूलेस हूँ। मुझे संदेह है कि मेरे लैपटॉप को फिर से बूट करना, अर्थात मेरे स्थानीय MySQL सर्वर को रीसेट करना, या हो सकता है कि उपयोगकर्ता अनुमति अधिकारों को इसके साथ करना पड़े, लेकिन मैं यहाँ सिर्फ परिकल्पना कर रहा हूं।


इस तरह की त्रुटि के लिए आप कुछ समाधानों की जांच कर सकते हैं। codespeaker.com/laravel-framework/…
smzapp

जवाबों:


123

यहां थोड़ी देर से लेकिन आम तौर पर मैंने यह समस्या देखी है जब आपको 'innodb_file_per_table' मोड में चलने पर 'टेबलस्पेस फुल' त्रुटि मिलती है। बहुत अधिक विवरण ( यहां अधिक ) में जाने के बिना , डेटाबेस सर्वर का टेबलस्पेस innodb_data_file_path सेटिंग द्वारा परिभाषित किया गया है और डिफ़ॉल्ट रूप से छोटा है। यहां तक ​​कि बड़े किए गए, 'टेबलस्पेस फुल' अभी भी बड़े प्रश्नों के साथ हो सकता है और ऐसे (नॉन-टेबल 'सामान का बहुत कुछ वहां, पूर्ववत लॉग, कैश आदि ...) में संग्रहीत किया जाता है।

वैसे भी, मैंने पाया कि यदि आप OS डायरेक्टरी में देखते हैं, जहाँ फाइलें-प्रति-टेबल संग्रहीत हैं, / OSX पर डिफ़ॉल्ट रूप से / var / lib / mysql, / homerw iirc के साथ usr / लोकल / var / mysql, तो आप पाएंगे सामान्य साथी tablename.frm फ़ाइल के बिना अनाथ tablename.ibd फ़ाइल। यदि आप उस .ibd फ़ाइल को एक सुरक्षित अस्थायी स्थान पर ले जाते हैं (बस सुरक्षित होने के लिए) जो समस्या को ठीक कर दे।

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.ibd
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

एक चेतावनी हालांकि, सुनिश्चित करें कि मूल रूप से समस्या का कारण क्या है, उदाहरण के लिए लंबे समय तक चलने वाली क्वेरी, लॉक की गई तालिका, आदि ... को साफ कर दिया गया है। अन्यथा जब आप दूसरी बार कोशिश करते हैं तो आप किसी अन्य अनाथ .ibd फ़ाइल के साथ समाप्त होते हैं।


5
मेरा MySQL-Data डायरेक्टरी OS X पर था Yosemite के /usr/local/mysql/dataबजाय संग्रहीत किया गया था /var/lib/mysql/। अन्यथा पूरी तरह से समस्या का समाधान।
एलेक्स होपेन

13
मेरे मामले में यह काम नहीं किया ... मैंने अनाथ आईडी फ़ाइल को हटा दिया ... और जब मैंने तालिका को फिर से बनाया उसी नाम के साथ मुझे यह कहते हुए एक संदेश मिला कि तालिका पहले से मौजूद है (जिसके लिए मैंने हटा दिया है।) फ़ाइल) ... उपरोक्त कार्रवाई के बाद एक नई अनाथ .idb फ़ाइल dir में बनाई गई थी ... बहुत अजीब है ... मुझे नहीं पता कि वास्तव में क्या ग्रहण करना है।
दिमित्रीस पापागोरगिओउ

4
मुझे डिमिट्रिस के समान समस्या है - मुझे डेटाबेस से एक डंप बनाना था, डेटाबेस को छोड़ना और डंप से इसे पुनर्स्थापित करना था।
गेरफ्रीड

1
@Gerfried यह मेरे लिए इतनी देर तक काम किया जब तक मैंने फ़ाइल को हटाने के बाद MySQL प्रक्रिया को रोक दिया और शुरू कर दिया।
MER

2
@DimitrisPapageorgiou यह मेरे लिए इतनी देर तक काम किया जब तक मैंने फ़ाइल को हटाने के बाद MySQL प्रक्रिया को रोक दिया और शुरू कर दिया।
MER

75

Xampp और Mamp उपयोगकर्ता

डेटाबेस आयात करते समय (इसे खाली करने के बाद) MySQL को गर्तित करते समय एक ही त्रुटि हुई थी। मैंने पाया कि मेरे पास एक tablename.ibdफाइल बची हुई थी जबकि बाकी सभी को हटा दिया गया था। मैंने इसे मैन्युअल रूप से हटा दिया mysql/data/database_nameऔर त्रुटि चली गई।


क्या इस जवाब ने उन लोगों की मदद की जो XAMPP का उपयोग नहीं करते हैं?
टेक्नोट्रॉनिक

3
मुझ से अंगूठे! अच्छा काम किए। हालाँकि, मुझे मेरे लिए फ़ोल्डर के पथ के लिए थोड़ा अपडेट करने की अनुमति दें (इसे खोजने की कोशिश में भ्रमित हो गए): / एप्लीकेशन / XAMPP / xamppfiles / var / mysql
फेनिक्स औरास

इस का उपयोग कर लिनक्स इंजन में स्टोरेज इंजन से 168 एरर का उपयोग किया गया, Xampp का उपयोग नहीं किया गया और न ही Mamp (कोई आलोचना नहीं, सिर्फ सूचना दी गई)
स्टीवन

1
काम करता है! मैं टूटी हुई एक .ibd फ़ाइल को हटा दिया और फिर तालिका फिर से बनाई जा सकती है। उबंटू 16, मरदब
वजा़ज़ ११

डॉकर के लिए एक ही जाता है (यदि docker क्रैश या होस्ट पुनरारंभ होता है, तो आपके सिंक फ़ोल्डर के अंदर मृत तिथि हो सकती है जो इस त्रुटि को पैदा करता है)
Sliq

23

WAMP [विंडोज 7 अल्टीमेट x64-बिट] उपयोगकर्ताओं के लिए:

मैं इस बात से सहमत हूं कि डेंजरडेव ने क्या कहा और इसलिए मैं WAMP उपयोगकर्ताओं के लिए एक उत्तर उपलब्ध करा रहा हूं ।

नोट: सबसे पहले, आपको अपने .. \ WAMP \ Bin \ MySQL \ MySQL [आपका MySQL संस्करण] डेटा डेटा पर जाना होगा

अब, आप अपने सभी डेटाबेस के फ़ोल्डर देखेंगे

  • डेटाबेस के फोल्डर को डबल-क्लिक करें जिसमें ओपनिंग टेबल है
  • एक फ़ाइल नहीं होनी चाहिए [Your offending MySQL table name].frm, इसके बजाय एक फ़ाइल होनी चाहिए[Your offending MySQL table name].ibd
  • हटाएं [Your offending MySQL table name].ibd
  • फिर, इसे रीसायकल बिन से भी हटा दें
  • फिर डेटाबेस पर अपनी MySQL क्वेरी चलाएँ और आपका काम हो गया

22

यदि आप .idbइसे हटाने के बाद पुनः प्राप्त करते हैं , तो इस उत्तर को पढ़ें।

इसने मेरे साथ कैसे काम किया। मेरे पास इसके .idbबिना फ़ाइल थी .frmऔर जब भी मैं .idbफ़ाइल को हटाता हूं , डेटाबेस इसे फिर से बनाता है। और मुझे MySQL के दस्तावेज में एक लाइन में हल मिला ( Tablespace Is Not Exist part)

1- कुछ अन्य डेटाबेस डायरेक्टरी में एक मिलान .frm फ़ाइल बनाएं और इसे उस डेटाबेस डायरेक्टरी में कॉपी करें जहाँ ऑर्फ़न टेबल स्थित है।

2- मूल तालिका के लिए DROP टेबल जारी करें। उस तालिका को सफलतापूर्वक छोड़ देना चाहिए और इनबीडी को त्रुटि लॉग के लिए एक चेतावनी प्रिंट करनी चाहिए जो .ibd फ़ाइल गायब थी।

मैंने एक और टेबल .frmफ़ाइल की प्रतिलिपि बनाई और इसे मेरी लापता तालिका की तरह नाम दिया, फिर एक सामान्य ड्रॉप टेबल क्वेरी और वॉइला बनाया, यह काम किया और तालिका सामान्य रूप से गिरा दी गई!

मेरा सिस्टम खिड़कियों पर XAMPP है MariaDB v 10.1.8


3
मामले में यह किसी और के लिए स्पष्ट नहीं था: जब आपने .frm फ़ाइल बनाई है, और तालिका ड्रॉप करें, .idb फ़ाइल हटा दी जानी चाहिए।
Narretz

6
पुष्टि कर सकते हैं, कदम इस प्रकार होने चाहिए: 1. mysql / path / table_name.idb को हटाएं। table_name.frm जोड़ें। 3. DROP table_name
जेरेमी डेन्ने

इसने मेरे लिए काम किया। धन्यवाद। FK हटाते समय मुझे यह त्रुटि मिली और इसके तुरंत बाद, मैंने mysql को रोक दिया। मुझे लगता है कि यह मेरा टेबल डीफ़ डेटा दूषित हो गया है।
रोडोल्फो वेलास्को

याद रखें कि फाइल डालने के बाद mysql को फिर से शुरू करें और उसे छोड़ने की कोशिश करें
Seyed Ali Roshan

Mysql> data> mysql में, .frm फ़ाइल I Need की आवश्यकता है। क्या मैं इसे कॉपी कर सकता हूं?
तिमो

8

मेरे मामले में एकमात्र काम समाधान था:

  1. बनाने के लिए bad_tableइंजन = MyISAM ...
  2. rm bad_table.ibd
  3. ड्रॉप तालिका bad_table

मेरे लिए काम किया! [त्रुटि] InnoDB: फ़ाइल './dbname/tablename.ibd' पहले से मौजूद है, हालांकि संबंधित तालिका InnoDB डेटा शब्दकोश में मौजूद नहीं थी। क्या आपने SQL कमांड DISCARD TABLESPACE और IMPORT TABLESPACE का उपयोग किए बिना इनबॉक्स .ibd फाइलों को इधर-उधर कर दिया है, या mysqld को क्रिएट टेबल के बीच में क्रैश कर दिया है? आप MySQL के 'डाटाडिर' के तहत '/ .bbname/tablename.ibd' फाइल को हटाकर समस्या का समाधान कर सकते हैं।
PAdrian

1
टेबल नहीं बना सकते क्योंकि टेबल्स मौजूद है।
लियाम मिशेल

यह मेरे लिए काम नहीं है। ibd फ़ाइल मैं उसी इंजन के साथ तालिका को फिर से बनाना चाहता हूं, उसके बाद मैं इसे रखना चाहता हूं।
फजर रुक्मो

8

यह ठीक वैसा ही है जैसा मैंने फेडोरा पर 10.2.16 को मारीदब में किया था जब मेरे पास एक मेज थी जो लॉग फ़ाइल में बिल्कुल वैसी ही त्रुटियां दिखाती थी जैसे मुझे लगता है ...

2018-07-11  9:43:58 140323764213504 [Note] InnoDB: The file './database_name/innodb_table.ibd' already exists though the corresponding table did not exist in the InnoDB data dictionary. You can resolve the problem by removing the file.
2018-07-11  9:44:29 140323764213504 [Warning] InnoDB: Tablespace 'database_name/innodb_table' exists in the cache with id 2836 != 2918

आपके लाभ और त्रुटियां अलग-अलग हो सकती हैं, लेकिन मुख्य मैं मान रहा हूं

...already exists though the corresponding table did not exist in the InnoDB data dictionary...

ड्रॉप टेबल के साथ-साथ तालिका में परिवर्तन न करने ...

MariaDB [database_name]> drop table innodb_table;
ERROR 1051 (42S02): Unknown table 'database_name.innodb_table'

MariaDB [database_name]> alter table innodb_table discard tablespace;
ERROR 1146 (42S02): Table 'database_name.innodb_table' doesn't exist

तालिका बनाना भी इस तरह विफल रहता है:

MariaDB [database_name]> create table  innodb_table(`id` int(10) unsigned NOT NULL);
ERROR 1813 (HY000): Tablespace for table '`database_name`.`innodb_table`' exists. Please DISCARD the tablespace before IMPORT

इसे ठीक करने के लिए, मैंने जो किया वह पहले था

create table  innodb_table2(`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.07 sec)

उसके बाद / var / lib / mysql / database_name निर्देशिका में मैंने निम्नलिखित किया जैसा कि innodb_table.ibd की ओवरराइटिंग को स्वीकार करते हुए।

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

फिर वापस mysql कंसोल में मैंने दोनों टेबल पर एक सफल ड्रॉप कमांड जारी किया

MariaDB [database_name]> drop table innodb_table;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    8
Current database: database_name

Query OK, 0 rows affected (0.08 sec)

MariaDB [database_name]> drop table innodb_table2;
Query OK, 0 rows affected (0.25 sec)

और सब कुछ अब सभी वर्ग है और मैं एक एकल तालिका को पुनः बना सकता हूं ...

MariaDB [database_name]> create table  innodb_table (`id` int(10) unsigned NOT NULL);
Query OK, 0 rows affected (0.08 sec)

संपादित करें: मैं एक में जोड़ने के लिए जा रहा था

restorecon -Rv /var/lib/mysql/database_name 

डेटाबेस की प्रतिलिपि बनाने के बाद सभी सेलिनक्स संदर्भों को प्राप्त करने के लिए कमांड करें जिस तरह से उन्हें होना चाहिए, भले ही हम उन्हें डेटाबेस से लगभग तुरंत हटा रहे हैं, लेकिन विकल्प में आप केवल दो टीपी में --archive या -a विकल्प जोड़ सकते हैं आदेश, हां वास्तव में पुरालेख विकल्प इसे छोटा करता है:

cp innodb_table2.frm innodb_table.frm
cp innodb_table2.ibd innodb_table.ibd
chown mysql:mysql innodb_table.frm innodb_table.ibd
chmod 660 innodb_table.frm innodb_table.ibd
restorecon -Rv /var/lib/mysql/database_name
systemctl restart mariadb

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

cp -a innodb_table2.frm innodb_table.frm
cp -a innodb_table2.ibd innodb_table.ibd
systemctl restart mariadb

मैंने छोटी सूची के लिए उपर्युक्त लम्बी सूची को प्रतिस्थापित कर दिया है जिसे * के साथ छोटा किया जा सकता है।


इसने मेरे लिए CentOS MariaDB 10.2.31 पर अच्छा काम किया। मैं एक ऐसे समाधान की तलाश में था जिसे MySQL सेवा को पुनरारंभ करने की आवश्यकता नहीं थी और यह वह था। कुंजी स्वच्छ innodb_table2 फ़ाइलों (innodb_table2.frm और innodb_table2.ibd) का सेट बना रही है और दोनों को innodb_table फ़ाइलों के ऊपर रख रही है।
जस्टिन

6

मेरे मामले में:

पहले tableName.ibdअपने डेटाबेस डायरेक्टरी को मैसकल से निकालें और दूसरा रन:

ALTER TABLE tableName DISCARD TABLESPACE;
DROP TABLE tableName;

धन्यवाद, मेरे मामले में, मैंने 1) डेटाबेस सर्वर (सेवा mysql stop) 2) को रोक दिया आईडीडी फ़ाइल 3 को हटा दिया) डेटाबेस सर्वर शुरू किया (सेवा mysql start) ने परिवर्तन नहीं किया और क्वेरी को छोड़ दिया
lemk0

Windows में आपकी डेटाबेस निर्देशिका C: \ ProgramData \ MySQL में डिफ़ॉल्ट रूप से है
Rodin10

4

उपयोगकर्ता तालिका बनाने की कोशिश करते समय मुझे इसे वैम्पसरवर पर चलाने में वही त्रुटि मिली। मुझे एक users.ibd फ़ाइल मिली और मैंने इस फ़ाइल को हटाने के बाद, मैंने फिर से माइग्रेट कमांड चला दी और यह काम कर गया। मेरी विंडोज़ मशीन पर फ़ाइल wamp / bin / mysql / mysql5.6.12 / data / myproject में स्थित थी।


4

उपाय

हालांकि, आसान विकल्प यह है: MySQL को पुनरारंभ करें, फिर निम्न चार चरण करें:

1) created a dummy table in the database;
2) discarded its tablespace;
3) moved the .ibd file into the database folder on the system;
4) attached the tablespace back to the table

इस तरह, डेटा डिक्शनरी पर टेबलस्पेस आईडी और फाइल का मिलान हुआ; इस प्रकार टेबलस्पेस आयात करना सफल रहा।

यह आपको पुनर्प्राप्ति प्रक्रिया के दौरान इनोबीडी "गोचा" में से कुछ से निपटने या यहां तक ​​कि फ़ाइल स्थानांतरण से अधिक आत्मविश्वास दे सकता है।

संदर्भ


7
यह एक अकेला जवाब नहीं है।
नथानिएल फोर्ड

3

यहाँ समाधान कदम है:

  1. बैकअप अपने डेटाबेस (ड्रॉप विकल्प और डेटा के साथ संरचना)
  2. mysql इंजन सेवा बंद करो
  3. डेटाबेस निर्देशिका को मैन्युअल रूप से mysql / data के अंदर से निकालें
  4. mysql इंजन शुरू करें
  5. अपने दूषित डेटाबेस से अलग किसी भी नाम से नया डेटाबेस बनाएँ
  6. नए डेटाबेस के अंदर दूषित तालिका के नाम के साथ एकल तालिका बनाएं (यह रहस्य है)। और तालिका को उसी संरचना के साथ बनाना बेहतर है।
  7. पुराने दूषित डेटाबेस के लिए डेटाबेस का नाम बदलें
  8. अपने बैकअप को पुनर्स्थापित करें और आपकी तालिका ठीक काम करेगी।

2

कई बार यह मुद्दा था। यदि आपके पास एक बड़ा DB है और बैकअप / पुनर्स्थापना (अतिरिक्त अनुपलब्ध तालिका के साथ) से बचने का प्रयास करना चाहते हैं, तो आगे और पीछे कुछ समय आज़माएँ:

DROP TABLE my_table;

माई_टेबल डिसॉर्डर टैबलैस टें टर;

-तथा-

rm my_table.ibd (orphan w / o इसी my_table.frm) / var / lib / mysql / my_db / निर्देशिका में स्थित

-और फिर-

यदि आवश्यक नहीं है, तो बनाएँ my_table(...)


2

टैबलेनैम को हटाने / स्थानांतरित करना सुनिश्चित करें कि मेरे लिए काम नहीं किया।

मैंने इसे कैसे हल किया

चूंकि मैं भ्रष्ट और गैर-मौजूदा तालिका को हटाने जा रहा था, इसलिए मैंने phpmyadmin-> डेटाबेस-> निर्यात-> चयनित तालिकाओं को बैकअप-> निर्यात (as .sql) पर जाकर अन्य तालिकाओं का बैकअप लिया।

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

संभवतः मेरे पास भ्रष्ट तालिका का पूर्व बैकअप था।


2

यह त्रुटि तब होती है जब आप कुछ कार्यों को स्थगित करते हैं। जैसे गलत विदेशी कुंजी के साथ नीचे क्वेरी चलाना।

set foreign_key_checks=0

2

ठीक वैसी ही समस्या थी; मैं काढ़ा mysql@5.6(पहले 5.5 होने के बाद) जोड़ा था।

5.6 के लिए काढ़ा चूक innodb_file_per_table=15.5 में है जबकि वे हैं innodb_file_per_table=0

आपकी मौजूदा ibdata1फ़ाइल (संयुक्त इनोडब डेटा) अभी भी आपके द्वारा बनाने / छोड़ने की कोशिश कर रहे तालिकाओं के संदर्भ होंगे। या तो innodb_file_per_tableवापस 0 पर बदलें , या ibdata1 डेटा फ़ाइल को हटा दें ( यह आपके सभी डेटा को खो देगा, इसलिए सुनिश्चित करें कि आपने इसे पहले mysqldump किया है या पहले से ही .sql डंप है )।

दूसरा ब्रूफ़ mysql@5.6डिफ़ॉल्ट वह बिट मुझे पोर्ट की कमी थी, इसलिए नेटवर्किंग यूनिक्स सॉकेट्स के लिए डिफ़ॉल्ट थी, और mysql क्लाइंट रिपोर्टिंग करते रहे:

ERROR 2013 (HY000): Lost connection to MySQL server at 'sending authentication information', system error: 32

मैं जोड़ा <string>--port=3306</string>करने के लिए .plistसरणी, लेकिन आप यह भी निर्दिष्ट कर सकते हैं port=3306कि आपकाmy.cnf

भागो brew services stop mysql@5.6तो अपने बदलाव करोbrew services start mysql@5.6


1

टेबलस्पेस को छोड़ने की कोशिश आपको अन्य त्रुटियां दे सकती है। मेरे लिए, मुझे निम्नलिखित त्रुटि मिली:

DROP TABLESPACE `tablename`

Error Code: 1478. Table storage engine 'InnoDB' does not support the create option 'TABLESPACE or LOGFILE GROUP' 

मेरा समाधान डेटाबेस को गिराना था। यह इससे संबंधित किसी भी टेबलस्पेस को हटा देगा और आपको फिर से टेबल बनाने की अनुमति देगा।


19
दुर्भाग्य से यह कहने जैसा है कि 'मेरे पास एक पेंच है, और एक हथौड़ा का उपयोग करने से यह त्रुटि हो जाती है, इसलिए मेरा समाधान उस पर एक बोल्डर को गिराना था'। वास्तविक मूल्य यह पता लगाना होगा कि इस एक तालिका को पूरे डेटाबेस के बिना कैसे ठीक किया जाए।
जेसन

रवींद्र! मैं उम्मीद कर रहा था कि यह मेरे प्रश्न का एक वैकल्पिक समाधान होगा (और मैंने इसे एक उत्तर के रूप में पोस्ट किया है), लेकिन मैं पहले से ही डेटाबेस का नाम बदलने / छोड़ने की प्रक्रिया से आधे रास्ते पर हूं। मैं अब InnoDB से नफरत करता हूं।
नोबल उत्थान

लेकिन मैं डेटाबेस nuked, इसे फिर से बनाया है, और अभी भी यह समस्या है!
TRIG

@TRiG क्या आपने सर्वर को पुनरारंभ किया?
अरिस

1
मुझे लगता है कि मैं एक अलग सवाल पूछूंगा, @ ऐरिस। मेरे मामले में, यह एक उबंटू डेस्कटॉप पर है। मैंने न केवल MySQL, बल्कि पूरे मशीन को कई बार पुनः आरंभ किया है। डेटाबेस फ़ोल्डर को भी हाथ से हटा दिया rm -r। यह चिड़चिड़ा है, लेकिन न तो दिखावा है।
TRIG

1

यदि आपके पास उसी तालिका के अच्छे संस्करण के साथ कोई अन्य सर्वर है, तो आप एक प्रतिलिपि (table_copy) बना सकते हैं, table_copy को समस्या सर्वर में स्थानांतरित कर सकते हैं। फिर समस्या तालिका को हटाएं और तालिका का नाम बदलकर तालिका करें।


1

मेरे लिए यह सिर्फ MYSQL DATA निर्देशिका के तहत / var / lib / mysql / {db_name} (linux) और {table_name} .ibd फ़ाइल को छोड़ने में मदद करता था जो कि फ़ोल्डर नाम के समान था।


0

मैं केवल wamp से सीधे अपने लोकलहोस्ट में स्थित अपने पुराने DB को हटा देता हूं, सभी सेवाओं को रोक देता हूं, wamp / bin / mysql / mysql [संस्करण] / डेटा पर जाता हूं और मैंने DB को समस्या के साथ पाया, मैं इसे हटा देता हूं और सभी सेवाओं को फिर से शुरू कर देता हूं, फिर से अपना डेटाबेस बनाएं और यह हो गया है, अब आप अपनी टेबल आयात कर सकते हैं,


0

जिस तरह से मैंने इस समस्या को "हल" करने के लिए पाया वह काफी कष्टप्रद है, लेकिन एक स्क्रिप्ट है जो इसे संभालती है।

अनिवार्य रूप से, आपको दूर जाने के लिए फ़ाइलों ibdata1और ib_logfile*फ़ाइलों की आवश्यकता होती है (उनमें अन्य चीज़ों के साथ-साथ विदेशी कुंजी के मैपिंग भी शामिल हैं)। ऐसा करने का एकमात्र सुरक्षित तरीका यह है कि आप अपने सभी डेटाबेस को निर्यात करें, mysql को रोकें, फ़ाइलों को निकालें, mysql को प्रारंभ करें, और फिर फ़ाइलों को आयात करें।

इस समस्या को हल करने में मदद करने वाली स्क्रिप्ट https://github.com/uberhacker/shrink-ibdata1 है , भले ही इस स्क्रिप्ट का घोषित उद्देश्य अलग हो, यह समस्या को हल करता है।


0

मेरे लिए यह एकमात्र तरीका था:

  1. एक समान तालिका बनाएं
  2. नई समान तालिका की .frb और .idb फ़ाइलों को भ्रष्ट तालिका के नाम से कॉपी करें।
  3. निश्चित अनुमतियाँ
  4. मारियाडीबी को पुनः आरंभ करें
  5. भ्रष्ट तालिका को गिराओ

-1

अगर आपको यह समस्या है और आपके पास एक और विकल्प नहीं है कि इंजन को 'myisam' जैसे किसी अन्य इंजन में बदल दें, तो तालिका बनाने का प्रयास करें।

अस्वीकरण: यह मान्य उत्तर नहीं है क्योंकि आपके पास विदेशी कुंजी की कमी हो सकती है जो किसी अन्य भंडारण इंजन द्वारा समर्थित नहीं होगी। हर स्टोरेज इंजन में डेटा स्टोर और एक्सेस करने की अपनी खासियत होती है, इन बिंदुओं को भी ध्यान में रखा जाना चाहिए।


-1

कृपया आयात से पहले टेबलस्पेस को खारिज कर दें

मैं एक ही मुद्दा समाधान नीचे है मिल गया

  1. सबसे पहले आपको अपने डेटाबेस का नाम ड्रॉप करना होगा। यदि आपका डेटाबेस आपको नहीं हटा रहा है तो मुझे प्रवाहित करें। विंडोज सिस्टम के लिए आपकी निर्देशिका C: / xampp / mysql / data / yourdabasefolder "yourdabaseboard" को हटा देगा

  2. फिर से आपको नया डेटाबेस बनाना होगा और अपनी पुरानी sql फ़ाइल को आयात करना होगा। यह काम होगा

धन्यवाद


-1

मुझे अपनी MySQL डेटा निर्देशिका का पता लगाना था:

शो वारिअल्स जहां वैरिएबल_नाम पसंद है "% dir"

फिर उस डेटाबेस को हटाने के लिए मजबूर करें:

सूद rm -rf


-1

आप निम्न क्वेरी को mysql रूट उपयोगकर्ता के रूप में चला सकते हैं

drop tablespace `tableName`

-1

हे डेवलपर्स अपना समय बर्बाद मत करो। बस तालिका वाले डेटाबेस को हटा दें और पूरे टेबल को फिर से आयात करें। समय बचाना = समय धन है। चीयर्स।

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