Errore durante l'eliminazione del database (impossibile rmdir '.test \', errno: 17)


124

Fondamentalmente, mi è stato insegnato come creare una password di root usando il comando "mysqladmin -u root -p password", tutto questo tramite l'editor dei comandi di Windows. Ora, il processo successivo è stato quello di visualizzare i database predefiniti (info. Schema, mysql e test) che è stato ottenuto utilizzando "SHOW DATABASES;"

Ma secondo il libro, abbiamo dovuto eliminare il file di test ridondante e viene visualizzato il seguente errore:

Errore durante l'eliminazione del database (impossibile rmdir '.test \', errno: 17)

Il comando utilizzato è stato DROP DATABASE test;

Sto usando MYSQL e PHPMYADMIN. Qualche aiuto su come eliminare il file senza errori?


L'utente MySQL ha sicuramente la proprietà della directory dei dati rilevanti?
John Parker

Aggiornare. Ho creato un nuovo database da PHPMYADMIN e ho usato il comando nell'editor dei comandi, questa volta ha funzionato senza far apparire l'errore. Modifica: Middaparka, non ho ancora toccato quella parte. Non so, per impostazione predefinita, quali sono i permessi dati.
Sid

Immagino che le nuove versioni di MySQL non cancellino davvero il TEST del database invece prova a cancellare la cartella "TEST" nella tua directory mysql / bin, è solo un'altra soluzione da aggiungere al tuo processo di apprendimento .....
amenko

possibile duplicato di come eliminare il database
woz

Risposte:


163

Un database è rappresentato da una directory nella directory dei dati (di solito /var/lib/mysql) e la directory è destinata alla memorizzazione dei dati della tabella.

L' DROP DATABASEistruzione rimuoverà tutti i file di tabella e quindi rimuoverà la directory che rappresentava il database. Tuttavia, non rimuoverà i file non di tabella, rendendo non possibile rimuovere la directory.

MySQL visualizza un messaggio di errore quando non è possibile rimuovere la directory

puoi davvero eliminare manualmente il database rimuovendo tutti i file rimanenti nella directory del database e quindi nella directory stessa.


1
Grazie, Shakti Singh. Ho lasciato cadere la tabella di "test" visitando PHPMYADMIN, ma volevo farlo tramite l'editor dei comandi. Immagino di aver provato a cancellare lo stesso file ancora e ancora, quindi l'errore. Ho creato un nuovo DB e inserito il comando DROP DATABASE, ha funzionato!
Sid

2
Nota che puoi davvero rimuovere la directory da solo se il database ha solo tabelle MyISAM
n.

Nel mio caso ho dovuto logoute poi di loginnuovo, per vedere il database sparito.
Anas Azeem

5
Dove sono esattamente i file`?
Nero

Ho creato i file nella directory del database. Il mio problema è stato risolto dopo aver rimosso questi file.
zahid

37

Mi sono imbattuto in questo stesso problema su una nuova installazione di mysql 5.5 su un mac. Ho provato a eliminare lo schema di test e ho ricevuto un messaggio errno 17. errno 17 è l'errore restituito da alcune funzioni del sistema operativo posix che indica che un file esiste dove non dovrebbe. Nella directory dei dati, ho trovato uno strano file ".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

Una volta eseguito il rm del file .empty, il comando di rilascio del database è riuscito.

Non so da dove provenga il file .empty; come notato, questa era una nuova installazione di mysql. Forse qualcosa è andato storto durante il processo di installazione.


3
Vedi MySQL Bug # 62443 . Questo è un bug di MySQL introdotto intorno alla 5.5.11 a causa di una limitazione in cmake. Come hai detto, una soluzione alternativa è rimuovere data \ test \ .empty
John McCarthy

2
in Windows per me era: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond,

34

Vai al datadir per la tua installazione di mysql e rm manualmente i database. Può essere

/usr/local/var/mysql

Poi,

rm -R <Your DB name>

Per controllare datadir per la tua installazione,

vim the mysql.server file and find it there.

7
Sto eseguendo Linux mint con mysql 5.5.34-0ubuntu0.13.04.1 e lo memorizzano in / var / lib / mysql. Sono sicuro che sia diverso per le diverse distribuzioni.
Craig Schmidt

1
Grazie per avermi fatto sapere dov'era la directory !!
Sankalp Singha

Per me funziona :)
Allievo

ha funzionato per me prova rm -R databasename quindi ricarica phpmyadmin
Vikas Kandari


12

Se è XAMPP, procedi come segue:

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

Spero che questo ti aiuti.


+1 Funziona bene su Mac, se stai usando un XAMPP montato su di esso. apri il terminale tramite l'applicazione (app xampp montata) e segui la guida sopra.
Bobby Axe

Questo mi ha aiutato di nuovo :)
Bobby Axe

8

Mi sono appena imbattuto in questo problema con WAMP e phpMyAdmin che lo accompagna. Per rimuovere il database e far scomparire l'errore. Sono entrato C:\wamp\bin\mysql\mysql5.5.24\data\ed eliminato la cartella per il database in questione.

Quindi ho aggiornato la pagina su phpMyAdmin e il database non c'era più.


4

Solo per aggiungere alle risposte finora: in Windows 10, i file di dati sono conservati qui ...

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

Ci saranno directory per ogni schema nel database. Dovrai entrare nello schema che stai tentando di eliminare, eliminare manualmente tutti i file superflui, quindi provare di nuovo il comando drop.

Qualsiasi modifica al workbench rispetto a un database verrà archiviata in questa posizione. Ad esempio, ho riscontrato questo errore a seguito di un esercizio di reverse engineering su uno dei miei database e ho salvato le modifiche che vengono memorizzate in un file .mwb in questa posizione.


1

È possibile eliminare i dati nella directory sql.

Per me stavo usando AMPPS su Windows 10. Sono andato alla directory di installazione di AMPPs. per me è stato:

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

perché l'ho installato sulla mia unità secondaria.

Quindi aggiorna il tuo client SQL e vedrai che non c'è più.


1

Potrebbe essere necessario controllare due cose.

1- Autorizzazione del database Foleder Il database che si desidera eliminare deve avere lo stesso proprietario del processo mysql.

2- Directory Deve essere vuota Vai alla directory dei dati mysql e verifica che la directory sia vuota

Dopodiché collega il tuo cli mysql ed esegui nuovamente il comando drop database.


1

Esegui questo e rimuovi i file della cache corrispondenti nel db selezionato, quindi dopo puoi rilasciare il tuo database

Per prima cosa trova la directory dei dati MySQL contenente il database selezionato

Linux

  • Apri il file di configurazione di MySQL: less /etc/my.cnf
  • Cerca il termine "datadir": / datadir

  • Se esiste, evidenzierà una riga che dice: datadir = [percorso]

  • Puoi anche cercare manualmente quella linea. Di solito si trova sotto un'intestazione di sezione di [mysqld] ma non deve necessariamente essere trovato lì.

  • Se quella riga non esiste, MySQL per impostazione predefinita sarà: / var / lib / mysql.

Windows 1. Apri il file di configurazione di MySQL in Blocco note: my.ini

Il file my.ini si troverà nella cartella del programma MySQL, che dovrebbe essere ovunque sia stato installato. Se non hai installato MySQL, usa la funzione di "ricerca" di Windows per cercare my.ini. Puoi anche cercarlo manualmente passando a [unità]: \ Programmi \ MySQL \ MySQL Server 5.5.

  1. Fai una ricerca nel Blocco note per trovare il termine "datadir".

  2. Se esiste, evidenzierà una riga che dice: datadir = [percorso]

  3. Puoi anche cercare manualmente quella linea. Di solito si trova sotto un'intestazione di sezione di [mysqld] ma non deve necessariamente essere trovato lì.

  4. Se quella riga non esiste, probabilmente la troverai in [unità]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

NOTA: la cartella "ProgramData" potrebbe essere nascosta. Potrebbe essere necessario digitare il percorso esplicito in Windows Explore


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

Il comando selezionerà il valore solo dal database information_schema interno di MySQL e disabiliterà l'output tabulare e le intestazioni di colonna.

Output su Linux [risultato mio]:

/var/lib/mysql

o

mysql> select @@datadir;

su MYSQL CLI

e poi

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

cambia percorso in base al tuo risultato


0

Nel mio caso non ho visto alcuna tabella sotto il mio database su phpMyAdminche sto usando, Wamp serverma quando ho controllato la directory sotto C:\wamp\bin\mysql\mysql5.6.12\dataho trovato questo employed.ibdquando ho cancellato questo file manualmente sono stato in grado di accedere al dropdatabase phpMyAdminsenza problemi.


0

Nel mio caso il problema era un file di dump residuo nella directory del database. Quel file è stato probabilmente generato durante un test di script di backup su cui stavo lavorando. Una volta eliminato manualmente il file, potrei quindi rilasciare il database.


0

Ho avuto lo stesso problema (mysql 5.6 su mac) con errori "can't rmdir .." durante il rilascio dei database. Non è possibile eliminare una directory del database vuota. Grazie @Framework e @Beel per le soluzioni.

Per prima cosa ho cancellato la directory db dal terminale in (/ Applications / XAMPP / xamppfiles / var / mysql).

Per ulteriori rilasci di db, ho anche eliminato il file di prova vuoto. Nel mio caso il file si chiamava NOTEMPTY ma conteneva ancora 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 prima e poi

sudo rm -rf test/NOTEMPTY

Nessun problema a rilasciare database dopo


0

basta andare alla directory dei dati nel mio caso il percorso è "wamp \ bin \ mysql \ mysql5.6.17 \ data" qui vedrai la cartella di tutti i database, elimina questa cartella del tuo database, il db si abbasserà automaticamente :)


0

Mi sono imbattuto in questo problema e quando ho controllato la directory del database, c'erano diversi expfile (i file ibde frmerano stati rimossi). Elenco dei file per esaminare i loro attributi (poiché il proprietario aveva già i privilegi rw sui file)

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

Dice la pagina man

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

In realtà puoi chattr -equesti file, ma mysql non ti consente ancora di eliminare il database. La rimozione dei file con rm, tuttavia, consente di eliminare il database in modo pulito.


0

Succede perché potresti aver copiato la cartella del database della cartella / var / lib / mysql da un altro server al tuo server. Ma non hai copiato questi file: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Quindi puoi creare un nuovo db e tabelle puoi rilasciarle ma non puoi rilasciare i database che hai copiato da un altro server e non sei nemmeno in grado di esplorare lo stesso database che hai copiato da un altro server. Quindi ho anche copiato quei file: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 dopo che tutto ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.