Fehler beim Löschen der Datenbank (Kann '.test \' nicht rmdir, errno: 17)

124

Grundsätzlich wurde mir beigebracht, wie man mit dem Befehl "mysqladmin -u root -p password" ein Root-Passwort erstellt. Dies geschah alles über den Windows-Befehlseditor. Der nächste Prozess bestand nun darin, die Standarddatenbanken (Info-Schema, MySQL und Test) anzuzeigen, die mit "SHOW DATABASES" erreicht wurden.

Laut dem Buch mussten wir jedoch die redundante Testdatei löschen und der folgende Fehler wird angezeigt:

Fehler beim Löschen der Datenbank (Kann '.test \' nicht rmdir, errno: 17)

Der verwendete Befehl war DROP DATABASE test;

Ich benutze MYSQL und PHPMYADMIN. Hilfe zum fehlerfreien Löschen der Datei?

Sid
quelle
Hat der MySQL-Benutzer definitiv das Eigentum an dem relevanten Datenverzeichnis?
John Parker
Aktualisieren. Ich habe eine neue Datenbank aus PHPMYADMIN erstellt und den Befehl im Befehlseditor verwendet. Diesmal hat es funktioniert, ohne dass der Fehler aufgetreten ist. Edit: Middaparka, ich habe diesen Teil noch nicht wirklich berührt. Ich weiß standardmäßig nicht, welche Berechtigung erteilt wurde.
Sid
Ich denke, die neuen MySQL-Versionen löschen den Datenbank-TEST wirklich nicht. Versuchen Sie stattdessen, den Ordner "TEST" in Ihrem MySQL-Verzeichnis / bin zu löschen. Dies ist nur eine weitere Lösung, um Ihren Lernprozess zu erweitern .....
amenko
mögliches Duplikat, wie man Datenbank
löscht

Antworten:

163

Eine Datenbank wird (normalerweise /var/lib/mysql) durch ein Verzeichnis unter dem Datenverzeichnis dargestellt , und das Verzeichnis dient zur Speicherung von Tabellendaten.

Die DROP DATABASEAnweisung entfernt alle Tabellendateien und dann das Verzeichnis, das die Datenbank darstellt. Nicht-Tabellendateien werden jedoch nicht entfernt, wodurch das Entfernen des Verzeichnisses nicht möglich wird.

MySQL zeigt eine Fehlermeldung an, wenn das Verzeichnis nicht entfernt werden kann

Sie können die Datenbank wirklich manuell löschen, indem Sie alle verbleibenden Dateien im Datenbankverzeichnis und dann im Verzeichnis selbst entfernen.

Shakti Singh
quelle
1
Danke, Shakti Singh. Ich habe die Tabelle 'test' durch einen Besuch bei PHPMYADMIN gelöscht, wollte dies aber unbedingt über den Befehlseditor tun. Ich denke, ich habe immer wieder versucht, die gleiche Datei zu löschen, also der Fehler. Ich habe eine neue Datenbank erstellt und den Befehl DROP DATABASE eingegeben, es hat funktioniert!
Sid
2
Beachten Sie, dass Sie das Verzeichnis wirklich nur dann selbst entfernen können, wenn die Datenbank nur MyISAM-Tabellen enthält
Nr.
In meinem Fall musste ich logoutund dann loginwieder, um die Datenbank verschwunden zu sehen.
Anas Azeem
5
Wo genau sind die Dateien?
Schwarz
Ich habe die Dateien im Datenbankverzeichnis erstellt. Mein Problem wurde nach dem Entfernen dieser Dateien behoben.
Zahid
37

Ich bin auf dasselbe Problem bei einer Neuinstallation von MySQL 5.5 auf einem Mac gestoßen. Ich habe versucht, das Testschema zu löschen, und habe eine Fehlermeldung 17 erhalten. Fehler Nr. 17 ist der Fehler, der von einigen Posix-OS-Funktionen zurückgegeben wird und angibt, dass eine Datei dort vorhanden ist, wo sie nicht vorhanden sein sollte. Im Datenverzeichnis habe ich eine seltsame Datei ".empty" gefunden:

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

Nachdem ich die .empty-Datei erstellt hatte, war der Befehl zum Löschen der Datenbank erfolgreich.

Ich weiß nicht, woher die .empty-Datei stammt. Wie bereits erwähnt, war dies eine neue MySQL-Installation. Möglicherweise ist bei der Installation ein Fehler aufgetreten.

Beel
quelle
3
Siehe MySQL Bug # 62443 . Dies ist ein MySQL-Fehler, der um 5.5.11 aufgrund einer Einschränkung in cmake eingeführt wurde. Wie Sie sagten, besteht eine Problemumgehung darin, data \ test \ .empty zu entfernen
John McCarthy
2
In Windows war es für mich: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond
34

Gehen Sie zum Datenverzeichnis für Ihre MySQL-Installation und rm die Datenbanken manuell. Es kann sein

/usr/local/var/mysql

Dann,

rm -R <Your DB name>

Um den Datenverzeichnis für Ihre Installation zu überprüfen,

vim the mysql.server file and find it there.
Nerv
quelle
7
Ich verwende Linux Mint mit MySQL 5.5.34-0ubuntu0.13.04.1 und sie speichern es unter / var / lib / mysql. Ich bin sicher, dass es für verschiedene Distributionen unterschiedlich ist.
Craig Schmidt
1
Vielen Dank, dass Sie mich wissen lassen, wo sich das Verzeichnis befindet !!
Sankalp Singha
Funktioniert für mich :)
Schüler
arbeitete für mich versuchen rm -R Datenbankname dann laden Sie die phpmyadmin
Vikas Kandari
23

Für phpMyAdmin , gehen Sie zu xampp \ mysql \ data und einfach die Datenbank - Ordner löschen. Hat für mich gearbeitet !!

Floccinaucinihilipilifikation.
quelle
12

Wenn es sich um XAMPP handelt, gehen Sie wie folgt vor:

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

Hoffe das hilft.

Nasif Md. Tanjim
quelle
+1 Dies funktioniert gut auf einem Mac, wenn Sie ein gemountetes XAMPP verwenden. Öffnen Sie das Terminal über die Anwendung (gemountete xampp-App) und befolgen Sie die obigen Anweisungen.
Bobby Axe
Das hat mir wieder geholfen :)
Bobby Axe
8

Ich bin gerade auf dieses Problem mit WAMP und dem damit verbundenen phpMyAdmin gestoßen. Um die Datenbank zu entfernen und den Fehler zu beseitigen. ich ging inC:\wamp\bin\mysql\mysql5.5.24\data\ den Ordner für die betreffende Datenbank und löschte ihn.

Dann habe ich die Seite bei phpMyAdmin aktualisiert und die Datenbank war weg.

J86
quelle
4

Nur um die bisherigen Antworten zu ergänzen: In Windows 10 werden die Datendateien hier gespeichert ...

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

Für jedes Schema in Ihrer Datenbank gibt es Verzeichnisse. Sie sollten in das Schema gehen, das Sie löschen möchten, überflüssige Dateien manuell löschen und den Befehl drop erneut versuchen.

Alle Workbench-Änderungen an einer Datenbank werden an diesem Speicherort gespeichert. Zum Beispiel hatte ich diesen Fehler nach einer Reverse Engineering-Übung in einer meiner Datenbanken und dem Speichern der Änderungen, die in einer .mwb-Datei an diesem Speicherort gespeichert werden.

IqbalHamid
quelle
1

Sie können die Daten im SQL-Verzeichnis löschen.

Für mich habe ich AMPPS unter Windows 10 verwendet. Ich bin in das AMPP-Installationsverzeichnis gegangen. für mich war es:

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

weil ich es auf meinem sekundären Laufwerk installiert habe.

Aktualisieren Sie dann Ihren SQL-Client und Sie werden sehen, dass er weg ist.

moeiscool
quelle
1

Möglicherweise müssen Sie zwei Dinge überprüfen.

1- Erlaubnis des Datenbankordners Datenbankordners Die Datenbank, die Sie löschen muss denselben Eigentümer haben wie der MySQL-Prozess.

2- Verzeichnis muss leer sein Wechseln Sie zum MySQL-Datenverzeichnis und stellen Sie sicher , dass das Verzeichnis leer ist

Verbinden Sie danach Ihre MySQL-CLI und führen Sie den Befehl drop database erneut aus.

Mansur Ali
quelle
1

Gehen Sie dies durch und entfernen Sie die entsprechenden Cache-Dateien in der ausgewählten Datenbank, nachdem Sie Ihre Datenbank löschen können

Suchen Sie zuerst Ihr MySQL-Datenverzeichnis mit Ihrer ausgewählten Datenbank

Linux

  • Öffnen Sie die Konfigurationsdatei von MySQL: less /etc/my.cnf
  • Suchen Sie nach dem Begriff "datadir": / datadir

  • Wenn es existiert, wird eine Zeile hervorgehoben, die lautet: datadir = [Pfad]

  • Sie können diese Zeile auch manuell suchen. Es befindet sich normalerweise unter der Abschnittsüberschrift [mysqld], muss jedoch nicht unbedingt dort gefunden werden.

  • Wenn diese Zeile nicht vorhanden ist, lautet MySQL standardmäßig: / var / lib / mysql.

Windows 1. Öffnen Sie die Konfigurationsdatei von MySQL in Notepad: my.ini

Die my.ini befindet sich im MySQL-Programmordner, wo immer sie installiert wurde. Wenn Sie MySQL nicht installiert haben, verwenden Sie die Windows-Suchfunktion, um nach my.ini zu suchen. Sie können auch manuell danach suchen, indem Sie zu [Laufwerk] navigieren: \ Programme \ MySQL \ MySQL Server 5.5.

  1. Führen Sie eine Suche im Editor durch, um den Begriff "Datenverzeichnis" zu finden.

  2. Wenn es existiert, wird eine Zeile hervorgehoben, die lautet: datadir = [Pfad]

  3. Sie können diese Zeile auch manuell suchen. Es befindet sich normalerweise unter der Abschnittsüberschrift [mysqld], muss jedoch nicht unbedingt dort gefunden werden.

  4. Wenn diese Zeile nicht vorhanden ist, finden Sie sie wahrscheinlich unter [Laufwerk]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

HINWEIS: Der Ordner "ProgramData" ist möglicherweise ausgeblendet. Möglicherweise müssen Sie den expliziten Pfad in Windows Explore eingeben

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

Der Befehl wählt den Wert nur aus der internen Datenbank information_schema von MySQL aus und deaktiviert die tabellarische Ausgabe und die Spaltenüberschriften.

Ausgabe unter Linux [mein Ergebnis]:

/var/lib/mysql

oder

mysql> select @@datadir;

auf MYSQL CLI

und dann

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

Ändern Sie den Pfad basierend auf Ihrem Ergebnis

Jamil Noyda
quelle
0

In meinem Fall habe ich keine Tabellen unter meiner Datenbank gesehen, die phpMyAdminich verwende, Wamp serveraber als ich das Verzeichnis unter überprüfte, C:\wamp\bin\mysql\mysql5.6.12\datafand ich dies, employed.ibdals ich diese Datei manuell löschte, konnte ich problemlos auf dropdie Datenbank zugreifen phpMyAdmin.

Yousef Altaf
quelle
0

In meinem Fall war das Problem eine Restspeicherauszugsdatei im Datenbankverzeichnis. Diese Datei wurde wahrscheinlich während eines Backup-Skript-Tests generiert, an dem ich gearbeitet hatte. Sobald ich die Datei manuell gelöscht habe, konnte ich die Datenbank löschen.

Ranieri Machado
quelle
0

Ich hatte das gleiche Problem (MySQL 5.6 auf Mac) mit "Kann nicht rmdir .." - Fehler beim Löschen von Datenbanken. Das Verlassen eines leeren Datenbankverzeichnisses kann nicht entfernt werden. Vielen Dank an @Framework und @Beel für die Lösungen.

Ich habe zuerst das Datenbankverzeichnis aus dem Terminal in (/ Applications / XAMPP / xamppfiles / var / mysql) gelöscht.

Für weitere Datenbank-Drops habe ich auch die leere Testdatei gelöscht. In meinem Fall hieß die Datei NOTEMPTY, enthielt aber immer noch 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 zuerst und dann

sudo rm -rf test/NOTEMPTY

Keine Probleme, Datenbanken danach zu löschen

user3857472
quelle
0

Gehen Sie einfach in das Datenverzeichnis in meinem Fall. Der Pfad lautet "wamp \ bin \ mysql \ mysql5.6.17 \ data". Hier sehen Sie alle Datenbankordner. Löschen Sie einfach Ihren Datenbankordner. Die Datenbank wird automatisch gelöscht. :)

sms247
quelle
0

Ich bin auf dieses Problem gestoßen, und als ich das Datenbankverzeichnis ausgecheckt habe, gab es eine Reihe von expDateien (die ibdund frm-Dateien wurden entfernt). Auflisten der Dateien, um ihre Attribute zu überprüfen (da der Eigentümer bereits über RW-Berechtigungen für die Dateien verfügte)

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

Manpage sagt

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

Sie können chattr -ediese Dateien tatsächlich , aber mit MySQL können Sie die Datenbank trotzdem nicht löschen. Durch das Entfernen der Dateien mit rmkann die Datenbank jedoch sauber gelöscht werden.

dland
quelle
0

Dies liegt daran, dass Sie möglicherweise den Datenbankordner des Ordners / var / lib / mysql von einem anderen Server auf Ihren Server kopiert haben. Sie haben diese Dateien jedoch nicht kopiert: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 So. Sie können eine neue Datenbank und Tabellen erstellen, die Sie löschen können. Sie können jedoch nicht die Datenbanken löschen, die Sie von einem anderen Server kopiert haben, und Sie können auch nicht dieselbe Datenbank untersuchen, die Sie von einem anderen Server kopiert haben. Also habe ich auch diese Dateien kopiert: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 danach hat alles funktioniert.

Prakash Lakhara
quelle