Lỗi khi thả cơ sở dữ liệu (Không thể rmdir '.test \', errno: 17)


124

Về cơ bản, tôi đã được dạy về cách tạo mật khẩu gốc bằng lệnh "mysqladmin -u root -p password", điều này được thực hiện tất cả thông qua trình soạn thảo lệnh windows. Bây giờ, quá trình tiếp theo là hiển thị cơ sở dữ liệu mặc định (thông tin. Lược đồ, mysql và thử nghiệm) đã đạt được bằng cách sử dụng "SHOW DATABASES;"

Nhưng theo cuốn sách, chúng tôi đã phải xóa tệp kiểm tra thừa và lỗi sau sẽ xuất hiện:

Lỗi khi thả cơ sở dữ liệu (Không thể rmdir '.test \', errno: 17)

Lệnh được sử dụng là DROP DATABASE test;

Tôi đang sử dụng MYSQL và PHPMYADMIN. Bất kỳ sự giúp đỡ nào về cách thả tệp mà không có lỗi?


Người dùng MySQL có chắc chắn có quyền sở hữu thư mục dữ liệu liên quan không?
John Parker

Cập nhật. Tôi đã tạo cơ sở dữ liệu mới từ PHPMYADMIN và sử dụng lệnh trong trình chỉnh sửa lệnh, nó hoạt động mà không xuất hiện lỗi lần này. Edit: Middaparka, tôi thực sự chưa chạm vào phần đó. Tôi không biết, theo mặc định, quyền được cấp là gì.
Sid

Tôi đoán các phiên bản MySQL mới thực sự không xóa TEST cơ sở dữ liệu thay vào đó hãy thử xóa thư mục "TEST" trong thư mục / bin mysql của bạn, đây chỉ là một giải pháp khác để bổ sung vào quá trình học tập của bạn .....
amenko

có thể trùng lặp về cách thả cơ sở dữ liệu
woz

Câu trả lời:


163

Cơ sở dữ liệu được đại diện bởi một thư mục trong thư mục dữ liệu (thông thường /var/lib/mysql), và thư mục được dùng để lưu trữ dữ liệu bảng.

Câu DROP DATABASElệnh sẽ xóa tất cả các tệp bảng và sau đó xóa thư mục đại diện cho cơ sở dữ liệu. Tuy nhiên, nó sẽ không xóa các tệp không phải bảng, do đó không thể xóa thư mục.

MySQL hiển thị thông báo lỗi khi không thể xóa thư mục

bạn thực sự có thể xóa cơ sở dữ liệu theo cách thủ công bằng cách xóa bất kỳ tệp nào còn lại trong thư mục cơ sở dữ liệu và sau đó là chính thư mục đó.


1
Cảm ơn, Shakti Singh. Tôi đã bỏ bảng 'kiểm tra' bằng cách truy cập PHPMYADMIN, nhưng tôi thực sự muốn làm điều đó thông qua trình soạn thảo lệnh. Tôi đoán rằng tôi đã thử xóa cùng một tệp nhiều lần, vì vậy lỗi. Tôi đã tạo một DB mới và nhập lệnh DROP DATABASE, nó đã hoạt động!
Sid

2
Lưu ý rằng bạn thực sự chỉ có thể tự xóa thư mục nếu cơ sở dữ liệu chỉ có các bảng MyISAM
không có

Trong trường hợp của tôi, tôi đã phải logoutvà sau đó loginmột lần nữa, để xem cơ sở dữ liệu đi.
Anas Azeem

5
Chính xác thì các tập tin ở đâu?
Đen

Tôi đã tạo các tệp trong thư mục cơ sở dữ liệu. Sự cố của tôi đã được giải quyết sau khi xóa các tệp này.
zahid

37

Tôi đã gặp phải vấn đề tương tự này trên bản cài đặt mới của mysql 5.5 trên máy mac. Tôi đã cố gắng bỏ lược đồ thử nghiệm và nhận được thông báo errno 17. errno 17 là lỗi được trả về bởi một số hàm hệ điều hành posix cho biết rằng tệp tồn tại ở nơi không nên. Trong thư mục dữ liệu, tôi tìm thấy một tệp lạ ".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

Khi tôi rm'd tệp .empty, lệnh drop database đã thành công.

Tôi không biết tệp .empty đến từ đâu; như đã lưu ý, đây là một cài đặt mysql mới. Có lẽ đã xảy ra lỗi trong quá trình cài đặt.


3
Xem Lỗi MySQL # 62443 . Đây là một lỗi MySQL được giới thiệu vào khoảng 5.5.11 vì một hạn chế trong cmake. Như bạn đã nói, một cách giải quyết là xóa dữ liệu \ test \ .empty
John McCarthy

2
trong cửa sổ đối với tôi đó là: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

Đi tới cơ sở dữ liệu để cài đặt mysql của bạn và rm các cơ sở dữ liệu theo cách thủ công. Nó có thể

/usr/local/var/mysql

Sau đó,

rm -R <Your DB name>

Để kiểm tra datadir cho cài đặt của bạn,

vim the mysql.server file and find it there.

7
Tôi đang chạy bạc hà Linux với mysql 5.5.34-0ubuntu0.13.04.1 và họ lưu trữ nó dưới / var / lib / mysql. Tôi chắc rằng nó khác nhau đối với các bản phân phối khác nhau.
Craig Schmidt

1
Cảm ơn bạn đã cho tôi biết thư mục ở đâu !!
Sankalp Singha

Làm việc cho tôi :)
Học sinh

đã làm việc cho tôi, hãy thử tên cơ sở dữ liệu rm -R sau đó tải lại phpmyadmin
Vikas Kandari

23

Đối với phpmyadmin , hãy truy cập xampp \ mysql \ data và chỉ cần xóa thư mục cơ sở dữ liệu. Đã làm cho tôi !!


12

Nếu đó là XAMPP, hãy làm như sau:

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

Hi vọng điêu nay co ich.


+1 Điều này hoạt động tốt trên mac, nếu bạn đang sử dụng XAMPP được gắn trên đó. mở thiết bị đầu cuối thông qua ứng dụng (ứng dụng xampp được gắn kết) và làm theo hướng dẫn ở trên.
Bobby Axe

Điều này đã giúp tôi một lần nữa :)
Bobby Axe

8

Tôi vừa gặp sự cố này với WAMP và phpMyAdmin đi kèm với nó. Để loại bỏ cơ sở dữ liệu và làm cho lỗi biến mất. Tôi đã vào C:\wamp\bin\mysql\mysql5.5.24\data\và xóa thư mục cho cơ sở dữ liệu được đề cập.

Sau đó, tôi làm mới trang tại phpMyAdmin và cơ sở dữ liệu đã biến mất.


4

Chỉ để thêm vào các câu trả lời cho đến nay: Trong Windows 10, các tệp dữ liệu được giữ ở đây ...

C: \ ProgramData \ MySQL \ MySQL Server [mn] \ data

Sẽ có các thư mục cho mỗi lược đồ trong cơ sở dữ liệu của bạn. Bạn sẽ muốn vào bên trong lược đồ mà bạn đang cố gắng thả, xóa thủ công bất kỳ tệp thừa nào rồi thử lại lệnh thả.

Mọi thay đổi của bàn làm việc so với cơ sở dữ liệu sẽ được lưu trữ ở vị trí này. Ví dụ: tôi gặp lỗi này sau một bài tập thiết kế ngược trên một trong các cơ sở dữ liệu của mình và lưu các thay đổi được lưu trữ trong tệp .mwb ở vị trí này.


1

Bạn có thể xóa dữ liệu trong thư mục sql.

Đối với tôi, tôi đang sử dụng AMPPS trên windows 10. Tôi đã đi đến thư mục cài đặt AMPPs. đối với tôi đó là:

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

bởi vì tôi đã cài đặt nó trên ổ đĩa thứ cấp của mình.

Sau đó, làm mới ứng dụng khách SQL của bạn và bạn sẽ thấy nó biến mất.


1

Bạn có thể cần phải kiểm tra hai điều.

1- Sự cho phép của Database Foleder Cơ sở dữ liệu bạn muốn xóa phải có cùng chủ sở hữu như quy trình mysql đã có.

2- Thư mục Phải trống Chuyển đến thư mục dữ liệu mysql và xác minh rằng thư mục đó trống

Sau đó kết nối cli mysql của bạn và chạy lại lệnh drop database.


1

Thực hiện thao tác này và xóa các tệp bộ nhớ cache tương ứng trong db đã chọn sau đó sau khi bạn có thể thả cơ sở dữ liệu của mình

Đầu tiên hãy tìm Thư mục dữ liệu MySQL của bạn chứa DB đã chọn của bạn

Linux

  • Mở tệp cấu hình của MySQL: less /etc/my.cnf
  • Tìm kiếm cụm từ "datadir": / datadir

  • Nếu nó tồn tại, nó sẽ đánh dấu một dòng có nội dung: datadir = [path]

  • Bạn cũng có thể tìm dòng đó theo cách thủ công. Nó thường được tìm thấy dưới tiêu đề phần của [mysqld] nhưng nó không nhất thiết phải được tìm thấy ở đó.

  • Nếu dòng đó không tồn tại, thì MySQL sẽ mặc định là: / var / lib / mysql.

Windows 1. Mở tệp cấu hình của MySQL vào Notepad: my.ini

My.ini sẽ nằm trong thư mục chương trình MySQL, ở bất cứ nơi nào nó được cài đặt. Nếu bạn không cài đặt MySQL, hãy sử dụng tính năng "tìm kiếm" của Windows để tìm my.ini. Bạn cũng có thể tìm kiếm nó theo cách thủ công bằng cách duyệt tới [drive]: \ Program Files \ MySQL \ MySQL Server 5.5.

  1. Thực hiện tìm kiếm trong Notepad để tìm cụm từ "datadir".

  2. Nếu nó tồn tại, nó sẽ đánh dấu một dòng có nội dung: datadir = [path]

  3. Bạn cũng có thể tìm dòng đó theo cách thủ công. Nó thường được tìm thấy dưới tiêu đề phần của [mysqld] nhưng nó không nhất thiết phải được tìm thấy ở đó.

  4. Nếu dòng đó không tồn tại, thì có thể bạn sẽ tìm thấy nó trong [drive]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

LƯU Ý: Thư mục "ProgramData" có thể bị ẩn. Bạn có thể phải nhập đường dẫn rõ ràng vào Windows Explore


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

Lệnh sẽ chỉ chọn giá trị từ cơ sở dữ liệu information_schema nội bộ của MySQL và vô hiệu hóa đầu ra dạng bảng và tiêu đề cột.

Đầu ra trên Linux [kết quả của tôi]:

/var/lib/mysql

hoặc là

mysql> select @@datadir;

trên MYSQL CLI

và sau đó

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

thay đổi đường dẫn dựa trên kết quả của bạn


0

Trong trường hợp của tôi, tôi không thấy bất kỳ bảng nào trong cơ sở dữ liệu của mình phpMyAdminmà tôi đang sử dụng Wamp servernhưng khi tôi kiểm tra thư mục bên dưới, C:\wamp\bin\mysql\mysql5.6.12\datatôi đã tìm thấy bảng này employed.ibdkhi xóa tệp này theo cách thủ công, tôi có thể truy cập dropcơ sở dữ liệu phpMyAdminmột cách suôn sẻ mà không gặp bất kỳ sự cố nào.


0

Tôi trường hợp của tôi, vấn đề là một tệp kết xuất còn lại trong thư mục cơ sở dữ liệu. Tệp đó có thể đã được tạo trong quá trình kiểm tra tập lệnh sao lưu mà tôi đang làm việc. Sau khi xóa tệp theo cách thủ công, tôi có thể xóa cơ sở dữ liệu.


0

Tôi đã gặp vấn đề tương tự (mysql 5.6 trên mac) với lỗi 'không thể rmdir ..'- khi thả cơ sở dữ liệu. Để lại một thư mục cơ sở dữ liệu trống không thể loại bỏ. Cảm ơn @Framework và @Beel về các giải pháp.

Đầu tiên tôi đã xóa thư mục db khỏi Terminal trong (/ Applications / XAMPP / xamppfiles / var / mysql).

Để giảm thêm db, tôi cũng đã xóa tệp thử nghiệm trống. Trong trường hợp của tôi, tệp được gọi là NOTEMPTY nhưng vẫn chứa 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 đầu tiên và sau đó

sudo rm -rf test/NOTEMPTY

Không có vấn đề gì khi giảm cơ sở dữ liệu sau đó


0

chỉ cần chuyển đến thư mục dữ liệu trong trường hợp của tôi đường dẫn là "wamp \ bin \ mysql \ mysql5.6.17 \ data" ở đây bạn sẽ thấy tất cả thư mục cơ sở dữ liệu chỉ cần xóa thư mục cơ sở dữ liệu này của bạn thì db sẽ tự động bị xệ :)


0

Tôi gặp sự cố này và khi tôi kiểm tra thư mục cơ sở dữ liệu, có một số exptệp ( tệp ibdfrmđã bị xóa). Liệt kê các tệp để xem thuộc tính của chúng (vì chủ sở hữu đã có đặc quyền rw trên các tệp)

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

Trang Man nói

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

Bạn thực sự có thể thực hiện chattr -ecác tệp này, nhưng mysql vẫn không cho phép bạn xóa cơ sở dữ liệu. rmTuy nhiên, việc loại bỏ các tệp sẽ cho phép cơ sở dữ liệu được xóa sạch.


0

Điều này xảy ra vì bạn có thể đã sao chép thư mục cơ sở dữ liệu của thư mục / var / lib / mysql từ máy chủ khác sang máy chủ của bạn. Nhưng bạn chưa sao chép các tệp này: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Vì vậy bạn có thể tạo một db và bảng mới mà bạn có thể bỏ chúng nhưng bạn không thể bỏ cơ sở dữ liệu mà bạn đã sao chép từ một máy chủ khác và bạn cũng không thể khám phá cùng một cơ sở dữ liệu mà bạn đã sao chép từ một máy chủ khác. Vì vậy, tôi cũng đã sao chép các tệp đó: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 sau đó mọi thứ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.