เกิดข้อผิดพลาดในการทิ้งฐานข้อมูล (ไม่สามารถ rmdir '.test \', errno: 17)


124

โดยทั่วไปฉันได้รับการสอนเกี่ยวกับวิธีสร้างรหัสผ่านรูทโดยใช้คำสั่ง "mysqladmin -u root -p password" ซึ่งทำได้ทั้งหมดผ่านตัวแก้ไขคำสั่ง windows ตอนนี้กระบวนการต่อไปคือการแสดงฐานข้อมูลเริ่มต้น (ข้อมูล schema, mysql และการทดสอบ) ซึ่งทำได้โดยใช้ "SHOW DATABASES;"

แต่ตามหนังสือเราต้องลบไฟล์ทดสอบที่ซ้ำซ้อนและข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น:

เกิดข้อผิดพลาดในการทิ้งฐานข้อมูล (ไม่สามารถ rmdir '.test \', errno: 17)

คำสั่งที่นำไปใช้คือ DROP DATABASE test;

ฉันใช้ MYSQL และ PHPMYADMIN ความช่วยเหลือเกี่ยวกับวิธีการวางไฟล์โดยไม่มีข้อผิดพลาดหรือไม่?


ผู้ใช้ MySQL เป็นเจ้าของไดเร็กทอรีข้อมูลที่เกี่ยวข้องหรือไม่
John Parker

ปรับปรุง ฉันสร้างฐานข้อมูลใหม่จาก PHPMYADMIN และใช้คำสั่งในตัวแก้ไขคำสั่งมันทำงานได้โดยไม่เกิดข้อผิดพลาดในครั้งนี้ แก้ไข: Middaparka ฉันยังไม่ได้สัมผัสส่วนนั้นจริงๆ ฉันไม่รู้ว่าโดยค่าเริ่มต้นการอนุญาตคืออะไร
Sid

ฉันเดาว่า MySQL เวอร์ชันใหม่ไม่ได้ลบฐานข้อมูล TEST แทนลองลบโฟลเดอร์ "TEST" ในไดเร็กทอรี / bin mysql ของคุณซึ่งเป็นอีกทางเลือกหนึ่งสำหรับสิ่งนี้เพื่อเพิ่มในกระบวนการเรียนรู้ของคุณ .....
amenko

เป็นไปได้ที่จะทำซ้ำวิธีการวางฐานข้อมูล
woz

คำตอบ:


163

ฐานข้อมูลแสดงโดยไดเร็กทอรีภายใต้ไดเร็กทอรีข้อมูล (โดยปกติคือ /var/lib/mysql ) และไดเร็กทอรีมีไว้สำหรับจัดเก็บข้อมูลตาราง

DROP DATABASEคำสั่งจะลบไฟล์ตารางทั้งหมดแล้วลบไดเรกทอรีที่เป็นตัวแทนของฐานข้อมูล อย่างไรก็ตามจะไม่ลบไฟล์ที่ไม่ใช่ตารางโดยที่ทำให้ไม่สามารถลบไดเร็กทอรีได้

MySQL แสดงข้อความแสดงข้อผิดพลาดเมื่อไม่สามารถลบไดเร็กทอรี

คุณสามารถวางฐานข้อมูลด้วยตนเองได้โดยการลบไฟล์ที่เหลืออยู่ในไดเร็กทอรีฐานข้อมูลจากนั้นจึงลงไดเร็กทอรีเอง


1
ขอบคุณ Shakti Singh ฉันทิ้งตาราง 'ทดสอบ' โดยไปที่ PHPMYADMIN แต่ฉันต้องการทำผ่านตัวแก้ไขคำสั่งจริงๆ ฉันเดาว่าฉันพยายามลบไฟล์เดิมซ้ำแล้วซ้ำอีกดังนั้นข้อผิดพลาด ฉันสร้างฐานข้อมูลใหม่และป้อนคำสั่ง DROP DATABASE มันใช้งานได้!
Sid

2
โปรดทราบว่าคุณสามารถจริงๆเท่านั้นลบ directory ด้วยตัวเองถ้าฐานข้อมูลมีเพียงตาราง MyISAM
Nos

ในกรณีของฉันฉันต้องlogoutแล้วloginอีกครั้งเพื่อดูว่าฐานข้อมูลหายไป
Anas Azeem

5
ไฟล์ `อยู่ที่ไหนกันแน่?
Black

ฉันสร้างไฟล์ในไดเร็กทอรีฐานข้อมูลแล้ว ปัญหาของฉันได้รับการแก้ไขหลังจากลบไฟล์เหล่านี้
zahid

37

ฉันพบปัญหาเดียวกันนี้ในการติดตั้ง mysql 5.5 ใหม่บนเครื่อง mac ฉันพยายามวางสคีมาทดสอบและได้รับข้อความ errno 17 errno 17 คือข้อผิดพลาดที่ส่งกลับโดยฟังก์ชัน posix os บางอย่างที่ระบุว่ามีไฟล์อยู่ในที่ที่ไม่ควร ในไดเร็กทอรีข้อมูลฉันพบไฟล์แปลก ๆ ".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 คำสั่ง drop database ก็สำเร็จ

ฉันไม่รู้ว่าไฟล์. ว่างมาจากไหน ตามที่ระบุไว้นี่เป็นการติดตั้ง mysql ใหม่ อาจมีบางอย่างผิดพลาดในกระบวนการติดตั้ง


3
ดูMySQL bug # นี่คือข้อผิดพลาด MySQL ที่เปิดตัวประมาณ 5.5.11 เนื่องจากข้อ จำกัด ใน cmake ดังที่คุณกล่าววิธีแก้ปัญหาคือการลบ data \ test \ .empty
John McCarthy

2
ใน windows สำหรับฉันมันคือ: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

ไปที่ datadir สำหรับการติดตั้ง mysql และ rm ฐานข้อมูลด้วยตนเอง มันสามารถ

/usr/local/var/mysql

จากนั้น

rm -R <Your DB name>

ในการตรวจสอบข้อมูลสำหรับการติดตั้งของคุณ

vim the mysql.server file and find it there.

7
ฉันใช้ linux mint ด้วย mysql 5.5.34-0ubuntu0.13.04.1 และเก็บไว้ใต้ / var / lib / mysql ฉันแน่ใจว่ามันแตกต่างกันสำหรับ Distros อื่น
Craig Schmidt

1
ขอบคุณที่แจ้งให้เราทราบว่าไดเรกทอรีอยู่ที่ไหน !!
Sankalp Singha

ใช้ได้ผลสำหรับฉัน :)
นักเรียน

ทำงานให้ฉันลอง rm -R databasename จากนั้นโหลด phpmyadmin
Vikas Kandari


12

หากเป็น XAMPP ให้ดำเนินการดังต่อไปนี้:

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

หวังว่านี่จะช่วยได้


+1 สิ่งนี้ใช้งานได้ดีบน mac หากคุณใช้ XAMPP ที่ติดตั้งอยู่ เปิดเทอร์มินัลผ่านแอพพลิเคชั่น (แอพ xampp ที่ติดตั้ง) และทำตามคำแนะนำด้านบน
Bobby Axe

สิ่งนี้ช่วยฉันอีกครั้ง :)
Bobby Axe

8

ฉันเพิ่งพบปัญหานี้กับ WAMP และ phpMyAdmin ที่มาพร้อมกับมัน เพื่อลบฐานข้อมูลและทำให้ข้อผิดพลาดหายไป ฉันเข้าไปC:\wamp\bin\mysql\mysql5.5.24\data\และลบโฟลเดอร์สำหรับฐานข้อมูลที่มีปัญหา

จากนั้นฉันรีเฟรชเพจที่ phpMyAdmin และฐานข้อมูลก็หายไป


4

เพื่อเพิ่มการตอบสนองจนถึงตอนนี้: ใน Windows 10 ไฟล์ข้อมูลจะถูกเก็บไว้ที่นี่ ...

C: \ ProgramData \ MySQL \ MySQL เซิร์ฟเวอร์ [mn] \ data

จะมีไดเร็กทอรีสำหรับแต่ละสคีมาในฐานข้อมูลของคุณ คุณจะต้องเข้าไปในสคีมาที่คุณพยายามจะวางลบไฟล์ที่ไม่จำเป็นด้วยตนเองจากนั้นลองคำสั่งวางอีกครั้ง

การเปลี่ยนแปลงโต๊ะทำงานใด ๆ กับฐานข้อมูลจะถูกเก็บไว้ในตำแหน่งนี้ ตัวอย่างเช่นฉันมีข้อผิดพลาดนี้หลังจากทำแบบฝึกหัดวิศวกรรมย้อนกลับในฐานข้อมูลหนึ่งของฉันและบันทึกการเปลี่ยนแปลงที่เก็บไว้ในไฟล์. mwb ในตำแหน่งนี้


1

คุณสามารถลบข้อมูลในไดเร็กทอรี sql

สำหรับฉันฉันใช้ AMPPS บน windows 10 ฉันไปที่ไดเรกทอรีการติดตั้ง AMPPs สำหรับฉันมันคือ:

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

เพราะฉันติดตั้งไว้ในไดรฟ์รองของฉัน

จากนั้นรีเฟรชไคลเอนต์ SQL ของคุณและคุณจะเห็นว่ามันหายไป


1

คุณอาจต้องตรวจสอบสองสิ่ง

1- การอนุญาตฐานข้อมูล Folederฐานข้อมูลที่คุณต้องการลบต้องมีเจ้าของเดียวกับกระบวนการ mysql

2- ไดเรกทอรีต้องว่างเปล่าไปที่ไดเร็กทอรีข้อมูล mysql และตรวจสอบว่าไดเร็กทอรีว่าง

หลังจากนั้นเชื่อมต่อ mysql cli ของคุณและเรียกใช้คำสั่ง drop database อีกครั้ง


1

ทำตามขั้นตอนนี้และลบไฟล์แคชที่เกี่ยวข้องในฐานข้อมูลที่เลือกหลังจากนั้นคุณสามารถวางฐานข้อมูลของคุณได้

ขั้นแรกให้ค้นหา MySQL Data Directory ที่มี DB ที่คุณเลือก

ลินุกซ์

  • เปิดไฟล์กำหนดค่าของ MySQL: less /etc/my.cnf
  • ค้นหาคำว่า "datadir": / datadir

  • หากมีอยู่จะเน้นบรรทัดที่อ่านว่า: datadir = [path]

  • คุณยังสามารถค้นหาบรรทัดนั้นได้ด้วยตนเอง โดยทั่วไปจะพบได้ในส่วนหัวของ [mysqld] แต่ไม่จำเป็นต้องอยู่ที่นั่น

  • หากไม่มีบรรทัดนั้น MySQL จะเริ่มต้นเป็น: / var / lib / mysql

Windows 1. เปิดไฟล์คอนฟิกูเรชันของ MySQL ใน Notepad: my.ini

my.ini จะอยู่ในโฟลเดอร์โปรแกรม MySQL ซึ่งจะอยู่ที่ใดก็ตามที่ติดตั้ง หากคุณไม่ได้ติดตั้ง MySQL ให้ใช้คุณสมบัติ "ค้นหา" ของ Windows เพื่อค้นหา my.ini คุณยังสามารถค้นหาด้วยตนเองได้โดยไปที่ [drive]: \ Program Files \ MySQL \ MySQL Server 5.5

  1. ทำการค้นหาใน Notepad เพื่อค้นหาคำว่า "datadir"

  2. หากมีอยู่จะเน้นบรรทัดที่อ่านว่า: datadir = [path]

  3. คุณยังสามารถค้นหาบรรทัดนั้นได้ด้วยตนเอง โดยทั่วไปจะพบได้ในส่วนหัวของ [mysqld] แต่ไม่จำเป็นต้องอยู่ที่นั่น

  4. หากไม่มีบรรทัดนั้นคุณอาจพบได้ใน [drive]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data

หมายเหตุ: โฟลเดอร์ "ProgramData" อาจซ่อนอยู่ คุณอาจต้องพิมพ์เส้นทางที่ชัดเจนใน Windows Explore


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

คำสั่งจะเลือกค่าจากฐานข้อมูล information_schema ภายในของ MySQL เท่านั้นและปิดใช้งานเอาต์พุตตารางและส่วนหัวของคอลัมน์

เอาต์พุตบน Linux [ผลลัพธ์ของฉัน]:

/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) กับ 'can't rmdir ..'- ข้อผิดพลาดเมื่อวางฐานข้อมูล ไม่สามารถกำจัดไดเร็กทอรีฐานข้อมูลว่างออกได้ ขอบคุณ @Framework และ @Beel สำหรับการแก้ปัญหา

ก่อนอื่นฉันลบไดเร็กทอรี db ออกจาก Terminal ใน (/ Applications / XAMPP / xamppfiles / var / mysql)

สำหรับการลดลงของฐานข้อมูลเพิ่มเติมฉันได้ลบไฟล์ทดสอบที่ว่างเปล่า ในกรณีของฉันไฟล์ถูกเรียกว่า 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

Chmod ก่อนแล้ว

sudo rm -rf test/NOTEMPTY

ไม่มีปัญหาในการทิ้งฐานข้อมูลหลังจากนั้น


0

เพียงไปที่ไดเร็กทอรีข้อมูลในพา ธ เคสของฉันคือ "wamp \ bin \ mysql \ mysql5.6.17 \ data" ที่นี่คุณจะเห็นโฟลเดอร์ฐานข้อมูลทั้งหมดเพียงแค่ลบโฟลเดอร์ฐานข้อมูลนี้ฐานข้อมูลจะเสียโดยอัตโนมัติ :)


0

ฉันพบปัญหานี้และเมื่อฉันตรวจสอบไดเร็กทอรีฐานข้อมูลพบว่ามีexpไฟล์จำนวนหนึ่ง( ibdและfrmไฟล์ถูกลบออกไปแล้ว) การแสดงรายการไฟล์เพื่อดูแอตทริบิวต์ (เนื่องจากเจ้าของมีสิทธิ์ rw ในไฟล์แล้ว)

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 จากเซิร์ฟเวอร์อื่นไปยังเซิร์ฟเวอร์ของคุณ แต่คุณยังไม่ได้คัดลอกไฟล์เหล่านี้ / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 ดังนั้น คุณสามารถสร้างฐานข้อมูลและตารางใหม่ที่คุณสามารถวางได้ แต่คุณไม่สามารถวางฐานข้อมูลที่คุณคัดลอกมาจากเซิร์ฟเวอร์อื่นได้และคุณจะไม่สามารถสำรวจฐานข้อมูลเดียวกันกับที่คุณคัดลอกมาจากเซิร์ฟเวอร์อื่นได้ ดังนั้นฉันจึงคัดลอกไฟล์นั้นด้วย: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 หลังจากนั้นทุกอย่างก็ทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.