Błąd podczas usuwania bazy danych (Can't rmdir '.test \', errno: 17)

124

Zasadniczo nauczono mnie, jak utworzyć hasło roota za pomocą polecenia „mysqladmin -u root -p hasło”, wszystko to odbywało się za pomocą edytora poleceń systemu Windows. Teraz następnym procesem było wyświetlenie domyślnych baz danych (info. Schema, mysql i test), co zostało osiągnięte poprzez użycie "SHOW DATABASES;"

Ale zgodnie z książką musieliśmy usunąć zbędny plik testowy i wyskakuje następujący błąd:

Błąd podczas usuwania bazy danych (Can't rmdir '.test \', errno: 17)

Użyto polecenia DROP DATABASE test;

Używam MYSQL i PHPMYADMIN. Jakaś pomoc, jak upuścić plik bez błędów?

Sid
źródło
Czy użytkownik MySQL na pewno jest właścicielem odpowiedniego katalogu danych?
John Parker,
Aktualizacja. Utworzyłem nową bazę danych z PHPMYADMIN i użyłem polecenia w edytorze poleceń, tym razem działało bez wyskakiwania błędu. Edycja: Middaparka, naprawdę jeszcze nie dotknąłem tej części. Domyślnie nie wiem, jakie jest to pozwolenie.
Sid,
Wydaje mi się, że nowe wersje MySQL naprawdę nie usuwają bazy danych TEST, a zamiast tego spróbuj usunąć folder „TEST” w katalogu / bin mysql, to tylko kolejne rozwiązanie, które można dodać do procesu uczenia się .....
amenko
możliwy duplikat sposobu
usuwania

Odpowiedzi:

163

Baza danych jest reprezentowana przez katalog w katalogu danych (zwykle /var/lib/mysql), a katalog jest przeznaczony do przechowywania danych tabeli.

DROP DATABASEOświadczenie spowoduje usunięcie wszystkich plików tabel, a następnie usunąć katalog, który reprezentowany bazy danych. Nie spowoduje to jednak usunięcia plików innych niż tabele, przez co nie będzie można usunąć katalogu.

MySQL wyświetla komunikat o błędzie, gdy nie może usunąć katalogu

naprawdę możesz usunąć bazę danych ręcznie, usuwając wszelkie pozostałe pliki z katalogu bazy danych, a następnie sam katalog.

Shakti Singh
źródło
1
Dzięki, Shakti Singh. Porzuciłem tabelę „test”, odwiedzając PHPMYADMIN, ale naprawdę chciałem to zrobić za pomocą edytora poleceń. Chyba wielokrotnie próbowałem usunąć ten sam plik, więc błąd. Utworzyłem nową bazę danych i wprowadziłem polecenie DROP DATABASE, zadziałało!
Sid,
2
Pamiętaj, że możesz usunąć katalog samodzielnie tylko wtedy, gdy baza danych zawiera tylko tabele MyISAM
nr
W moim przypadku musiałem, logouta potem loginznowu, aby zobaczyć zniknięcie bazy danych.
Anas Azeem
5
Gdzie dokładnie są pliki?
Czarny
Utworzyłem pliki w katalogu bazy danych. Mój problem został rozwiązany po usunięciu tych plików.
zahid
37

Napotkałem ten sam problem podczas nowej instalacji mysql 5.5 na komputerze Mac. Próbowałem porzucić schemat testowy i otrzymałem komunikat errno 17. errno 17 to błąd zwracany przez niektóre funkcje systemu POSIX wskazujący, że plik istnieje tam, gdzie nie powinien. W katalogu danych znalazłem dziwny plik „.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

Po sprawdzeniu pliku .empty polecenie drop database zakończyło się powodzeniem.

Nie wiem, skąd pochodzi plik .empty; jak wspomniano, była to nowa instalacja mysql. Być może podczas instalacji coś poszło nie tak.

Beel
źródło
3
Zobacz błąd MySQL nr 62443 . Jest to błąd MySQL wprowadzony około 5.5.11 z powodu ograniczenia cmake. Jak powiedziałeś, obejściem jest usunięcie data \ test \ .empty
John McCarthy,
2
w windows dla mnie to było: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond
34

Przejdź do katalogu datadir dla swojej instalacji mysql i ręcznie rm bazy danych. To może być

/usr/local/var/mysql

Następnie,

rm -R <Your DB name>

Aby sprawdzić datadir dla swojej instalacji,

vim the mysql.server file and find it there.
Nerw
źródło
7
Używam linux mint z mysql 5.5.34-0ubuntu0.13.04.1 i przechowują go w / var / lib / mysql. Jestem pewien, że jest inaczej dla różnych dystrybucji.
Craig Schmidt,
1
Dziękuję za poinformowanie mnie, gdzie był katalog !!
Sankalp Singha,
U mnie działa :)
Uczeń
pracował dla mnie spróbuj rm -R
nazwa
23

W przypadku phpmyadmin przejdź do xampp \ mysql \ data i po prostu usuń folder bazy danych. Pracował dla mnie !!

Floccinaucinihilipilification.
źródło
12

Jeśli to XAMPP, wykonaj następujące czynności:

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

Mam nadzieję że to pomoże.

Nasif Md. Tanjim
źródło
+1 Działa to dobrze na Macu, jeśli używasz na nim zamontowanego XAMPP. otwórz terminal za pomocą aplikacji (zamontowanej aplikacji xampp) i postępuj zgodnie z powyższym przewodnikiem.
Bobby Axe
To znowu mi pomogło :)
Bobby Axe
8

Właśnie napotkałem ten problem z WAMP i phpMyAdmin, który jest z nim związany. Aby usunąć bazę danych i wyeliminować błąd. Wszedłem C:\wamp\bin\mysql\mysql5.5.24\data\i usunąłem folder dla danej bazy danych.

Następnie odświeżyłem stronę w phpMyAdmin i baza danych zniknęła.

J86
źródło
4

Aby dodać do dotychczasowych odpowiedzi: w systemie Windows 10 pliki danych są przechowywane tutaj ...

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

W twojej bazie danych będą katalogi dla każdego schematu. Będziesz chciał wejść do schematu, który próbujesz upuścić, ręcznie usunąć zbędne pliki, a następnie ponownie spróbuj wykonać polecenie drop.

Wszelkie zmiany w środowisku roboczym w bazie danych zostaną zapisane w tej lokalizacji. Na przykład wystąpił ten błąd po wykonaniu ćwiczenia z inżynierii wstecznej w jednej z moich baz danych i zapisaniu zmian, które są przechowywane w pliku .mwb w tej lokalizacji.

IqbalHamid
źródło
1

Możesz usunąć dane w katalogu sql.

U mnie używałem AMPPS na Windows 10. Poszedłem do katalogu instalacyjnego AMPP. dla mnie to było:

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

ponieważ mam go zainstalowanego na moim drugim dysku.

Następnie odśwież swojego klienta SQL, a zobaczysz, że zniknął.

moeiscool
źródło
1

Konieczne może być sprawdzenie dwóch rzeczy.

1- Zezwolenie Database Foleder Baza danych, którą chcesz usunąć, musi mieć tego samego właściciela co proces mysql.

2- Katalog musi być pusty Przejdź do katalogu danych mysql i sprawdź, czy katalog jest pusty

Następnie podłącz swoje mysql cli i ponownie uruchom polecenie drop database.

Mansur Ali
źródło
1

Przejdź przez to i usuń odpowiednie pliki pamięci podręcznej w wybranej bazie danych, a następnie po upuszczeniu bazy danych

Najpierw znajdź katalog danych MySQL zawierający wybraną bazę danych

Linux

  • Otwórz plik konfiguracyjny MySQL: less /etc/my.cnf
  • Wyszukaj termin „datadir”: / datadir

  • Jeśli istnieje, podświetli wiersz o treści: datadir = [ścieżka]

  • Możesz również ręcznie wyszukać tę linię. Zwykle znajduje się pod nagłówkiem sekcji [mysqld], ale niekoniecznie musi się tam znajdować.

  • Jeśli ta linia nie istnieje, MySQL ustawi domyślnie: / var / lib / mysql.

Windows 1. Otwórz plik konfiguracyjny MySQL w Notatniku: my.ini

Plik my.ini zostanie umieszczony w folderze programu MySQL, który będzie tam, gdzie został zainstalowany. Jeśli nie zainstalowałeś MySQL, użyj funkcji wyszukiwania systemu Windows, aby znaleźć my.ini. Możesz również wyszukać go ręcznie, przechodząc do [dysk]: \ Program Files \ MySQL \ MySQL Server 5.5.

  1. Wyszukaj w Notatniku termin „datadir”.

  2. Jeśli istnieje, podświetli wiersz o treści: datadir = [ścieżka]

  3. Możesz również ręcznie wyszukać tę linię. Zwykle znajduje się pod nagłówkiem sekcji [mysqld], ale niekoniecznie musi się tam znajdować.

  4. Jeśli ta linia nie istnieje, prawdopodobnie znajdziesz ją w [dysk]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

UWAGA: folder „ProgramData” może być ukryty. Może być konieczne wpisanie jawnej ścieżki do Eksploratora Windows

Mewan
źródło
1
mysql -s -N -username -p information_schema -e 'SELECT Variable_Value FROM GLOBAL_VARIABLES WHERE Variable_Name = "datadir"'

Polecenie wybierze wartość tylko z wewnętrznej bazy danych information_schema MySQL i wyłącza tabelaryczne dane wyjściowe i nagłówki kolumn.

Dane wyjściowe w systemie Linux [mój wynik]:

/var/lib/mysql

lub

mysql> select @@datadir;

na MYSQL CLI

i wtedy

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

zmień ścieżkę na podstawie wyniku

Jamil Noyda
źródło
0

W moim przypadku nie widziałem żadnych tabel pod moją bazą danych na phpMyAdminktórej używam, Wamp serverale kiedy sprawdziłem katalog pod nim C:\wamp\bin\mysql\mysql5.6.12\data, znalazłem to, employed.ibdkiedy ręcznie usunąłem ten plik, mogłem płynnie przejść dropdo bazy danych phpMyAdminbez żadnych problemów.

Yousef Altaf
źródło
0

W moim przypadku problemem był szczątkowy plik zrzutu w katalogu bazy danych. Ten plik został prawdopodobnie wygenerowany podczas testu skryptu kopii zapasowej, nad którym pracowałem. Po ręcznym usunięciu pliku mogłem usunąć bazę danych.

Ranieri Machado
źródło
0

Miałem ten sam problem (mysql 5.6 na Macu) z błędami „Can't rmdir ..” - podczas usuwania baz danych. Opuszczenia pustego katalogu bazy danych nie można się pozbyć. Dzięki @Framework i @Beel za rozwiązania.

Najpierw usunąłem katalog db z terminala w (/ Applications / XAMPP / xamppfiles / var / mysql).

W przypadku dalszych spadków db usunąłem również pusty plik testowy. W moim przypadku plik nazywał się NOTEMPTY, ale nadal zawierał 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 najpierw, a potem

sudo rm -rf test/NOTEMPTY

Po tym nie ma problemów z usuwaniem baz danych

user3857472
źródło
0

po prostu przejdź do katalogu danych w moim przypadku ścieżka to "wamp \ bin \ mysql \ mysql5.6.17 \ data", tutaj zobaczysz wszystkie foldery baz danych, po prostu usuń ten folder bazy danych, który zostanie automatycznie opuszczony :)

sms247
źródło
0

Napotkałem ten problem i kiedy sprawdziłem katalog bazy danych, było tam kilka expplików ( pliki ibdi frmzostały usunięte). Lista plików w celu sprawdzenia ich atrybutów (ponieważ właściciel miał już uprawnienia rw do plików)

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

Strona podręcznika mówi

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

Właściwie możesz chattr -ete pliki, ale mysql nadal nie pozwoli ci upuścić bazy danych. Usunięcie plików za pomocą rmumożliwia jednak czyste upuszczenie bazy danych.

dland
źródło
0

Dzieje się tak, ponieważ mogłeś skopiować folder bazy danych folderu / var / lib / mysql z innego serwera na swój serwer. Ale nie skopiowałeś tych plików: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Więc możesz utworzyć nową bazę danych i tabele, możesz je usunąć, ale nie możesz usunąć baz danych skopiowanych z innego serwera, a także nie możesz eksplorować tej samej bazy danych, którą skopiowałeś z innego serwera. Więc skopiowałem również te pliki: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1, potem wszystko działało.

Prakash Lakhara
źródło