डेटाबेस छोड़ने में त्रुटि ('rtdir' नहीं कर सकते हैं, गलत है: 17)


124

मूल रूप से, मुझे "mysqladmin -u root -p password" कमांड का उपयोग करके रूट पासवर्ड बनाने के बारे में सिखाया गया था, यह सब विंडोज़ कमांड एडिटर के माध्यम से किया गया था। अब, अगली प्रक्रिया डिफ़ॉल्ट डेटाबेस (जानकारी स्कीमा, mysql और परीक्षण) प्रदर्शित करने के लिए थी जिसे "SHOW DATABASES;"

लेकिन पुस्तक के अनुसार, हमें अनावश्यक परीक्षण फ़ाइल को हटाना पड़ा और निम्नलिखित त्रुटि पॉप अप हुई:

डेटाबेस छोड़ने में त्रुटि ('rtdir' नहीं कर सकते हैं, गलत है: 17)

कमांड का उपयोग करने के लिए रखा गया था DROP DATABASE test;

मैं MYSQL और PHPMYADMIN का उपयोग कर रहा हूं। बिना किसी त्रुटि के फ़ाइल को कैसे छोड़ा जाए, इस पर कोई मदद?


क्या MySQL उपयोगकर्ता के पास निश्चित रूप से प्रासंगिक डेटा निर्देशिका का स्वामित्व है?
जॉन पार्कर

अपडेट करें। मैंने PHPMYADMIN से एक नया डेटाबेस बनाया और कमांड एडिटर में कमांड का उपयोग किया, इस बार त्रुटि को पॉप किए बिना काम किया। संपादित करें: मिडपार्क, मैंने वास्तव में अभी तक उस हिस्से को नहीं छुआ है। मुझे नहीं पता, डिफ़ॉल्ट रूप से, क्या अनुमति दी गई है।
सिड

मुझे लगता है कि नए MySQL संस्करण वास्तव में डेटाबेस टेस्ट को डिलीट नहीं करते हैं, इसके बजाय आपके mysql डायरेक्टरी / बिन में फ़ोल्डर "TEST" को हटाने का प्रयास करें, इसका सिर्फ एक और उपाय यह है कि आप अपनी सीखने की प्रक्रिया में इसे शामिल करें .....
amenko

जवाबों:


163

डेटाबेस को डेटा निर्देशिका (आमतौर पर /var/lib/mysql) के तहत एक निर्देशिका द्वारा दर्शाया जाता है , और तालिका डेटा के भंडारण के लिए निर्देशिका का इरादा है।

DROP DATABASEबयान सभी तालिका फ़ाइलों को हटा दें और फिर निर्देशिका कि डेटाबेस में प्रतिनिधित्व को हटा दें। हालांकि, यह गैर-टेबल फ़ाइलों को नहीं हटाएगा, जिससे निर्देशिका को निकालना संभव नहीं होगा।

MySQL एक त्रुटि संदेश प्रदर्शित करता है जब वह निर्देशिका को हटा नहीं सकता है

आप डेटाबेस निर्देशिका में किसी भी शेष फ़ाइलों को हटाकर और फिर निर्देशिका को मैन्युअल रूप से डेटाबेस को वास्तव में छोड़ सकते हैं।


1
धन्यवाद, शक्ति सिंह। मैंने PHPMYADMIN पर जाकर 'परीक्षण' की तालिका को गिरा दिया, लेकिन मैं वास्तव में इसे कमांड संपादक के माध्यम से करना चाहता था। मुझे लगता है कि मैंने एक ही फ़ाइल को बार-बार हटाने की कोशिश की, इसलिए त्रुटि। मैंने एक नया DB बनाया और DROP DATABASE कमांड में प्रवेश किया, इसने काम किया!
सिड

2
नोट आप वास्तव में केवल निर्देशिका अपने आप को दूर कर सकते हैं कि यदि डेटाबेस केवल MyISAM तालिकाओं है
ओपन स्कूल

मेरे मामले में मुझे डेटाबेस को देखने के लिए logoutफिर loginसे और फिर से जाना पड़ा ।
अनस अज़ीम

5
वास्तव में फाइलें कहां हैं?
ब्लैक

मैंने डेटाबेस डायरेक्टरी में फाइलें बनाई हैं। इन फ़ाइलों को हटाने के बाद मेरा मुद्दा हल हो गया।
जाहिद

37

मैं एक ही मुद्दे पर mysql 5.5 की एक नई स्थापना पर भाग गया MAC। मैंने परीक्षण स्कीमा छोड़ने की कोशिश की और एक गलत संदेश मिला। 17 गलत है, कुछ पॉज़िक्स ओएस फ़ंक्शन द्वारा लौटाया गया त्रुटि यह दर्शाता है कि एक फ़ाइल मौजूद है जहां इसे नहीं होना चाहिए। डेटा निर्देशिका में, मुझे एक अजीब फ़ाइल ".empty" मिली:

sh-3.2# ls -la data/test
total 0
drwxr-xr-x   3 _mysql  wheel  102 Apr 15 12:36 .
drwxr-xr-x  11 _mysql  wheel  374 Apr 15 12:28 ..
-rw-r--r--   1 _mysql  wheel    0 Mar 31 10:19 .empty

एक बार जब मैं .empty फ़ाइल rm'd, ड्रॉप डेटाबेस कमांड सफल रहा।

मुझे नहीं पता कि .empty फ़ाइल कहाँ से आई है; जैसा कि कहा गया है, यह एक नया mysql इंस्टॉल था। शायद इंस्टॉल की प्रक्रिया में कुछ गलत हो गया।


3
MySQL बग # 62443 देखें । यह एक MySQL बग है, जिसे 5.5ake के आसपास लाया गया है, क्योंकि इसे सेमीकेम में सीमित किया गया है। जैसा कि आपने कहा, एक वर्कअराउंड डेटा \ test \ .empty को हटाने के लिए है
जॉन मैक्कार्थी

2
मेरे लिए विंडोज़ में यह था: C: \ wamp \ bin \ mysql \ mysql5.5.2.24 \ data \ test \
Máthé Endre-Botond

34

अपने mysql इंस्टालेशन के लिए डेटादिर पर जाएँ और डेटाबेस को मैन्युअल रूप से rm करें। यह हो सकता है

/usr/local/var/mysql

फिर,

rm -R <Your DB name>

अपने इंस्टालेशन के लिए डेटादिर की जाँच करने के लिए,

vim the mysql.server file and find it there.

7
मैं mysql 5.5.34-0ubuntu0.13.04.1 के साथ linux टकसाल चला रहा हूं और वे इसे / var / lib / mysql के तहत स्टोर करते हैं। मुझे यकीन है कि यह अलग-अलग विकृतियों के लिए अलग है।
क्रेग श्मिट

1
मुझे बताने के लिए धन्यवाद कि निर्देशिका कहाँ थी !!
संकल्प सिंह

मेरे लिए काम करता है :)
Pupil

मेरे लिए rm -R डेटाबेस्नेम की कोशिश करें, फिर phpmyadmin को पुनः लोड करें
Vikand Kandari

23

के लिए phpmyadmin , पर जाएँ \ mysql \ डेटा XAMPP और बस डेटाबेस फ़ोल्डर हटाना। मेरे लिए काम किया !!


12

यदि यह XAMPP है, तो निम्न कार्य करें:

cd /opt/lampp/var/mysql;
sudo su;
rm -rf test;

उम्मीद है की यह मदद करेगा।


+1 यह मैक पर अच्छी तरह से काम करता है, अगर आप इस पर माउंटेड XAMPP का उपयोग कर रहे हैं। एप्लिकेशन (माउंटेड xampp ऐप) के माध्यम से टर्मिनल खोलें और ऊपर दिए गए गाइड का पालन करें।
बॉबी एक्स

इससे मुझे फिर से मदद मिली :)
बॉबी एक्स

8

मैं अभी WAMP और इसके साथ आने वाले phpMyAdmin के साथ इस समस्या में भाग गया। डेटाबेस को हटाने और त्रुटि दूर करने के लिए। मैं गया C:\wamp\bin\mysql\mysql5.5.24\data\और प्रश्न में डेटाबेस के लिए फ़ोल्डर को हटा दिया।

तब मैंने पृष्ठ को phpMyAdmin पर ताज़ा किया, और डेटाबेस चला गया था।


4

बस अब तक प्रतिक्रियाओं में जोड़ने के लिए: विंडोज 10 में, डेटा फ़ाइलों को यहां रखा गया है ...

C: \ ProgramData \ MySQL \ MySQL सर्वर [mn] \ data

आपके डेटाबेस में प्रत्येक स्कीमा के लिए निर्देशिकाएं होंगी। आप उस स्कीमा के अंदर जाना चाहेंगे जिसे आप छोड़ने की कोशिश कर रहे हैं, मैन्युअल रूप से किसी भी ज़रूरत से ज़्यादा फ़ाइलों को हटा दें फिर ड्रॉप कमांड को फिर से आज़माएँ।

डेटाबेस के विरुद्ध कोई भी कार्यक्षेत्र परिवर्तन इस स्थान पर संग्रहीत किया जाएगा। उदाहरण के लिए, मेरे पास मेरे डेटाबेस में से एक पर रिवर्स इंजीनियरिंग अभ्यास के बाद यह त्रुटि हुई और उन परिवर्तनों को सहेजा गया जो इस स्थान में .mwb फ़ाइल में संग्रहीत हैं।


1

आप sql निर्देशिका में डेटा हटा सकते हैं।

मेरे लिए मैं विंडोज़ 10 पर एएमपीपीएस का उपयोग कर रहा था। मैं एएमपीपी किस्त निर्देशिका में गया। मेरे लिए यह था:

D:\Program Files (x86)\Ampps\mysql\data

क्योंकि मैंने इसे अपने द्वितीयक ड्राइव पर स्थापित किया है।

फिर अपने SQL क्लाइंट को रिफ्रेश करें और आप देखेंगे कि यह चला गया है।


1

आपको दो चीजों की जांच करने की आवश्यकता हो सकती है।

1- डाटाबेस फोल्डर की अनुमति जिस डेटाबेस को आप हटाना चाहते हैं, उसके पास वही मालिक होना चाहिए जो mysql प्रक्रिया के पास है।

2- निर्देशिका खाली होना चाहिए गोटो mysql डेटा निर्देशिका और सत्यापित करें कि निर्देशिका खाली है

उसके बाद अपने mysql cli को कनेक्ट करें और फिर से ड्रॉप डेटाबेस कमांड को रन करें।


1

इसके माध्यम से जाओ और चयनित db में संबंधित कैश फ़ाइलों को हटा दें, उसके बाद आप अपने डेटाबेस को छोड़ सकते हैं

सबसे पहले अपने MySQL डाटा डायरेक्टरी को अपने चुने हुए DB को खोजें

लिनक्स

  • MySQL की कॉन्फ़िगरेशन फ़ाइल खोलें: कम /etc/my.cnf
  • "डेटादिर" शब्द के लिए खोजें: / डेटादिर

  • यदि यह मौजूद है, तो यह उस पंक्ति को उजागर करेगा जो पढ़ता है: datadir = [path]

  • आप मैन्युअल रूप से उस लाइन को भी देख सकते हैं। यह आमतौर पर [mysqld] के एक सेक्शन हेडिंग के तहत पाया जाता है, लेकिन यह जरूरी नहीं कि वहां पाया ही जाए।

  • यदि वह रेखा मौजूद नहीं है, तो MySQL डिफ़ॉल्ट होगा: / var / lib / mysql।

विंडोज 1. नोटपैड में MySQL की कॉन्फ़िगरेशन फ़ाइल खोलें: my.ini

My.ini MySQL प्रोग्राम फ़ोल्डर में स्थित होगा, जो कि जहाँ भी स्थापित हो जाएगा। यदि आपने MySQL स्थापित नहीं किया है, तो my.ini देखने के लिए विंडोज "खोज" सुविधा का उपयोग करें। आप मैन्युअल रूप से [ड्राइव]: \ Program Files \ MySQL \ MySQL Server 5.5 पर ब्राउज़ करके इसे खोज सकते हैं।

  1. "डेटादिर" शब्द को खोजने के लिए नोटपैड में एक खोज करें।

  2. यदि यह मौजूद है, तो यह उस पंक्ति को उजागर करेगा जो पढ़ता है: datadir = [path]

  3. आप मैन्युअल रूप से उस लाइन को भी देख सकते हैं। यह आमतौर पर [mysqld] के एक सेक्शन हेडिंग के तहत पाया जाता है, लेकिन यह जरूरी नहीं कि वहां पाया ही जाए।

  4. यदि वह रेखा मौजूद नहीं है, तो संभवतः आप इसे [ड्राइव]: \ ProgramData \ MySQL \ MySQL सर्वर 5.5 \ डेटा के अंतर्गत पा लेंगे।

नोट: "ProgramData" फ़ोल्डर छिपाया जा सकता है। आपको विंडोज एक्स्प्लोर में स्पष्ट रास्ता लिखना होगा


1
mysql -s -N -username -p information_schema -e 'SELECT Variable_Value FROM GLOBAL_VARIABLES WHERE Variable_Name = "datadir"'

आदेश केवल MySQL के आंतरिक सूचना_केम डेटाबेस से मूल्य का चयन करेगा और सारणीबद्ध आउटपुट और कॉलम हेडर को अक्षम करता है।

लिनक्स पर उत्पादन [मेरा परिणाम]:

/var/lib/mysql

या

mysql> select @@datadir;

MYSQL CLI पर

और फिर

cd /var/lib/mysql && rm -rf test/NOTEMPTY

अपने परिणाम के आधार पर परिवर्तन पथ


0

मेरे मामले में मैं अपने डेटाबेस के तहत किसी भी टेबल पर नहीं देखा phpMyAdminमैं उपयोग कर रहा हूँ Wamp serverलेकिन जब मैं के तहत निर्देशिका जाँच की C:\wamp\bin\mysql\mysql5.6.12\dataमैं इस पाया employed.ibdजब मैं इस फ़ाइल को नष्ट कर दिया मैन्युअल मैं सक्षम करने के लिए था dropडेटाबेस से phpMyAdminसुचारू रूप से बिना किसी समस्या के।


0

मैं अपना मामला समस्या डेटाबेस निर्देशिका में एक अवशिष्ट डंप फ़ाइल था। वह फ़ाइल संभवतः एक बैकअप स्क्रिप्ट परीक्षण के दौरान उत्पन्न हुई थी जिस पर मैं काम कर रहा था। एक बार जब मैंने मैन्युअल रूप से फाइल को डिलीट कर दिया तो मैं डेटाबेस को छोड़ सकता था।


0

मैं एक ही मुद्दा था (mysql 5.6 पर MAC) के साथ 'rmdir नहीं कर सकता ..' - त्रुटियों जब डेटाबेस गिराने। खाली डेटाबेस निर्देशिका को छोड़ना संभव नहीं है। धन्यवाद @Framework और समाधान के लिए @ नील।

मैंने सबसे पहले टर्मिनल से (/ एप्लिकेशन / XAMPP / xamppfiles / var / mysql) में db डायरेक्टरी को डिलीट किया।

आगे के db ड्रॉप्स के लिए, मैंने खाली टेस्ट फाइल को भी डिलीट कर दिया। मेरे मामले में फ़ाइल को NOTEMPTY कहा गया था, लेकिन फिर भी इसमें 0 था:

sudo ls -al test
total 0
drwxrwx---   3 _mysql  _mysql  102 Mar 26 16:50 .
drwxrwxr-x  18 _mysql  _mysql  612 Apr  7 13:34 ..
-rw-rw----   1 _mysql  _mysql    0 Jun 26  2013 NOTEMPTY

चामोद पहले और फिर

sudo rm -rf test/NOTEMPTY

डेटाबेस को छोड़ने के बाद कोई समस्या नहीं है


0

मेरे केस पथ में बस डेटा डायरेक्टरी पर जाएं "wamp \ bin \ mysql \ mysql5.6.17 \ data" यहां आपको सभी डेटाबेस फ़ोल्डर दिखाई देंगे बस अपने डेटाबेस फ़ोल्डर को हटा दें db स्वचालित रूप से हटा दिया जाएगा :)


0

मैं इस समस्या में भाग गया, और जब मैंने डेटाबेस निर्देशिका की जाँच की, तो कई फाइलें थीं exp( ibdऔर frmफाइलें हटा दी गई थीं)। उनकी विशेषताओं को देखने के लिए फाइलों को सूचीबद्ध करना (चूंकि स्वामी के पास पहले से ही फाइलों पर विशेषाधिकार था)

lsattr *.exp
-------------e-- foo.exp
-------------e-- bar.exp

मैन पेज कहता है

       The  'e'  attribute  indicates that the file is using extents for mapping the blocks on disk.
       It may not be removed using chattr(1).

आप वास्तव में chattr -eइन फ़ाइलों को कर सकते हैं , लेकिन mysql अभी भी आपको डेटाबेस को छोड़ने नहीं देगा। rmहालाँकि, फ़ाइलों को निकालना डेटाबेस को साफ़ सुथरा करने की अनुमति देता है।


0

ऐसा इसलिए होता है क्योंकि आपने किसी अन्य सर्वर से अपने सर्वर पर प्रतिलिपि / var / lib / mysql फ़ोल्डर के डेटाबेस फ़ोल्डर की प्रतिलिपि बनाई हो सकती है। लेकिन आपने इन फ़ाइलों को कॉपी नहीं किया है: आप एक नई डीबी और टेबल बना सकते हैं जिसे आप उन्हें छोड़ सकते हैं लेकिन आप उन डेटाबेस को नहीं छोड़ सकते जिन्हें आपने दूसरे सर्वर से कॉपी किया है और आप उसी डेटाबेस का पता लगाने में भी सक्षम नहीं हैं जिसे आपने दूसरे सर्वर से कॉपी किया था। इसलिए मैंने वह फाइलें भी कॉपी कीं: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 उसके बाद सब कुछ काम किया।

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