Erreur lors de la suppression de la base de données (impossible de rmdir '.test \', numéro d'erreur: 17)


124

Fondamentalement, on m'a appris comment créer un mot de passe root en utilisant la commande "mysqladmin -u root -p password", cela a été fait via l'éditeur de commandes Windows. Maintenant, le processus suivant consistait à afficher les bases de données par défaut (info. Schema, mysql et test), ce qui était réalisé en utilisant "SHOW DATABASES;"

Mais selon le livre, nous avons dû supprimer le fichier de test redondant et l'erreur suivante apparaît:

Erreur lors de la suppression de la base de données (impossible de rmdir '.test \', numéro d'erreur: 17)

La commande utilisée était DROP DATABASE test;

J'utilise MYSQL et PHPMYADMIN. Une aide sur la façon de déposer le fichier sans erreur?


L'utilisateur MySQL est-il définitivement propriétaire du répertoire de données pertinent?
John Parker

Mettre à jour. J'ai créé une nouvelle base de données à partir de PHPMYADMIN et utilisé la commande dans l'éditeur de commande, cela a fonctionné sans faire apparaître l'erreur cette fois. Edit: Middaparka, je n'ai vraiment pas encore touché à cette partie. Je ne sais pas, par défaut, quelle est l'autorisation donnée.
Sid

Je suppose que les nouvelles versions de MySQL ne suppriment pas vraiment la base de données TEST, essayez plutôt de supprimer le dossier "TEST" dans votre répertoire mysql / bin, c'est juste une autre solution pour cela à ajouter à votre processus d'apprentissage .....
amenko

duplication possible de la suppression de la base de données
woz

Réponses:


163

Une base de données est représentée par un répertoire sous le répertoire de données (généralement /var/lib/mysql) et le répertoire est destiné au stockage des données de table.

L' DROP DATABASEinstruction supprimera tous les fichiers de table, puis supprimera le répertoire qui représentait la base de données. Cependant, il ne supprimera pas les fichiers non-table, ce qui ne permettra pas de supprimer le répertoire.

MySQL affiche un message d'erreur lorsqu'il ne peut pas supprimer le répertoire

vous pouvez vraiment supprimer la base de données manuellement en supprimant tous les fichiers restants dans le répertoire de la base de données, puis le répertoire lui-même.


1
Merci, Shakti Singh. J'ai laissé tomber la table de «test» en visitant PHPMYADMIN, mais je voulais vraiment le faire via l'éditeur de commandes. Je suppose que j'ai essayé de supprimer le même fichier encore et encore, donc l'erreur. J'ai créé une nouvelle base de données et entré la commande DROP DATABASE, cela a fonctionné!
Sid

2
Notez que vous ne pouvez vraiment supprimer le répertoire vous-même que si la base de données ne contient que des tables MyISAM
nos

Dans mon cas, je devais logoutet puislogin encore une fois, voir la base de données disparue.
Anas Azeem

5
Où sont exactement les fichiers?
noir

J'ai créé les fichiers dans le répertoire de la base de données. Mon problème a été résolu après la suppression de ces fichiers.
zahid

37

J'ai rencontré ce même problème sur une nouvelle installation de mysql 5.5 sur un mac. J'ai essayé de supprimer le schéma de test et j'ai reçu un message errno 17. errno 17 est l'erreur renvoyée par certaines fonctions os posix indiquant qu'un fichier existe là où il ne devrait pas. Dans le répertoire data, j'ai trouvé un étrange fichier ".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

Une fois que j'ai rm le fichier .empty, la commande drop database a réussi.

Je ne sais pas d'où vient le fichier .empty; comme indiqué, il s'agissait d'une nouvelle installation de mysql. Peut-être que quelque chose s'est mal passé lors du processus d'installation.


3
Voir le bogue MySQL n ° 62443 . Il s'agit d'un bogue MySQL introduit vers la version 5.5.11 à cause d'une limitation dans cmake. Comme vous l'avez dit, une solution de contournement consiste à supprimer data \ test \ .empty
John McCarthy

2
dans Windows pour moi c'était: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

Accédez au datadir de votre installation mysql et rm les bases de données manuellement. Ça peut être

/usr/local/var/mysql

Ensuite,

rm -R <Your DB name>

Pour vérifier le datadir de votre installation,

vim the mysql.server file and find it there.

7
J'exécute linux mint avec mysql 5.5.34-0ubuntu0.13.04.1 et ils le stockent sous / var / lib / mysql. Je suis sûr que c'est différent pour différentes distributions.
Craig Schmidt

1
Merci de m'avoir fait savoir où se trouvait l'annuaire !!
Sankalp Singha

Works for me :)
Élève du

a travaillé pour moi essayez rm -R databasename puis rechargez le phpmyadmin
Vikas Kandari


12

S'il s'agit de XAMPP, procédez comme suit:

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

J'espère que cela t'aides.


+1 Cela fonctionne bien sur mac, si vous utilisez un XAMPP monté dessus. ouvrez le terminal via l'application (application xampp montée) et suivez le guide ci-dessus.
Bobby Axe

Cela m'a aidé à nouveau :)
Bobby Axe

8

Je viens de rencontrer ce problème avec WAMP et le phpMyAdmin qui l'accompagne. Pour supprimer la base de données et faire disparaître l'erreur. Je suis allé dansC:\wamp\bin\mysql\mysql5.5.24\data\ et supprimé le dossier de la base de données en question.

Ensuite, j'ai actualisé la page sur phpMyAdmin, et la base de données avait disparu.


4

Juste pour ajouter aux réponses jusqu'à présent: sous Windows 10, les fichiers de données sont conservés ici ...

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

Il y aura des répertoires pour chaque schéma dans votre base de données. Vous voudrez aller dans le schéma que vous essayez de supprimer, supprimer manuellement tous les fichiers superflus, puis réessayer la commande drop.

Toute modification de l'atelier par rapport à une base de données sera stockée à cet emplacement. Par exemple, j'ai eu cette erreur suite à un exercice de rétro-ingénierie sur l'une de mes bases de données et en enregistrant les modifications qui sont stockées dans un fichier .mwb à cet emplacement.


1

Vous pouvez supprimer les données dans le répertoire sql.

Pour moi, j'utilisais AMPPS sur Windows 10. Je suis allé dans le répertoire d'installation AMPP. pour moi c'était:

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

parce que je l'ai installé sur mon disque secondaire.

Ensuite, actualisez votre client SQL et vous verrez qu'il est parti.


1

Vous devrez peut-être vérifier deux choses.

1- Autorisation de Database Foleder La base de données que vous souhaitez supprimer doit avoir le même propriétaire que le processus mysql.

2- Le répertoire doit être vide Accédez au répertoire de données mysql et vérifiez que le répertoire est vide

Après cela, connectez votre mysql cli et exécutez à nouveau la commande drop database.


1

Passez par ceci et supprimez les fichiers de cache correspondants dans la base de données sélectionnée, puis après vous pouvez supprimer votre base de données

Recherchez d'abord votre répertoire de données MySQL contenant votre base de données sélectionnée

Linux

  • Ouvrez le fichier de configuration de MySQL: less /etc/my.cnf
  • Recherchez le terme "datadir": / datadir

  • S'il existe, il mettra en évidence une ligne qui se lit comme suit: datadir = [chemin]

  • Vous pouvez également rechercher manuellement cette ligne. Il se trouve généralement sous un titre de section de [mysqld] mais il ne doit pas nécessairement y être trouvé.

  • Si cette ligne n'existe pas, MySQL sera par défaut: / var / lib / mysql.

Windows 1. Ouvrez le fichier de configuration de MySQL dans le Bloc-notes: my.ini

Le my.ini sera situé dans le dossier du programme MySQL, qui se trouverait là où il a été installé. Si vous n'avez pas installé MySQL, utilisez la fonction de «recherche» de Windows pour rechercher my.ini. Vous pouvez également le rechercher manuellement en accédant à [lecteur]: \ Program Files \ MySQL \ MySQL Server 5.5.

  1. Faites une recherche dans le Bloc-notes pour trouver le terme «datadir».

  2. S'il existe, il mettra en évidence une ligne qui se lit comme suit: datadir = [chemin]

  3. Vous pouvez également rechercher manuellement cette ligne. Il se trouve généralement sous un titre de section de [mysqld] mais il ne doit pas nécessairement y être trouvé.

  4. Si cette ligne n'existe pas, vous la trouverez probablement sous [lecteur]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

REMARQUE: le dossier «ProgramData» peut être masqué. Vous devrez peut-être taper le chemin explicite dans Windows Explorer


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

La commande sélectionne la valeur uniquement dans la base de données interne information_schema de MySQL et désactive la sortie tabulaire et les en-têtes de colonne.

Sortie sous Linux [résultat de la mine]:

/var/lib/mysql

ou

mysql> select @@datadir;

sur MYSQL CLI

puis

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

changer de chemin en fonction de votre résultat


0

Dans mon cas, je n'ai vu aucune table sous ma base de données sur que phpMyAdminj'utilise, Wamp servermais lorsque j'ai vérifié le répertoire sous, C:\wamp\bin\mysql\mysql5.6.12\dataj'ai trouvé cela employed.ibdlorsque j'ai supprimé ce fichier manuellement, j'ai pu accéder à dropla base de données en phpMyAdmindouceur sans aucun problème.


0

Dans mon cas, le problème était un fichier de vidage résiduel dans le répertoire de la base de données. Ce fichier a probablement été généré lors d'un test de script de sauvegarde sur lequel j'avais travaillé. Une fois que j'ai supprimé manuellement le fichier, j'ai pu supprimer la base de données.


0

J'ai eu le même problème (mysql 5.6 sur mac) avec des erreurs «impossible de rmdir ..» lors de la suppression de bases de données. Laisser un répertoire de base de données vide impossible à éliminer. Merci @Framework et @Beel pour les solutions.

J'ai d'abord supprimé le répertoire db du terminal dans (/ Applications / XAMPP / xamppfiles / var / mysql).

Pour d'autres gouttes de base de données, j'ai également supprimé le fichier de test vide. Dans mon cas, le fichier s'appelait NOTEMPTY mais contenait toujours 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 d'abord et ensuite

sudo rm -rf test/NOTEMPTY

Aucun problème pour supprimer des bases de données après cela


0

allez simplement dans le répertoire de données dans mon cas, le chemin est "wamp \ bin \ mysql \ mysql5.6.17 \ data" ici vous verrez tous les dossiers de bases de données, supprimez simplement ce dossier de base de données, la base de données tombera automatiquement :)


0

J'ai rencontré ce problème et lorsque j'ai extrait le répertoire de la base de données, il y avait un certain nombre de expfichiers (les fichiers ibdet frmavaient été supprimés). Liste des fichiers pour regarder leurs attributs (puisque le propriétaire avait déjà les privilèges rw sur les fichiers)

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

La page de l'homme dit

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

Vous pouvez en fait chattr -eces fichiers, mais mysql ne vous laissera toujours pas supprimer la base de données. rmCependant, la suppression des fichiers avec permet de supprimer proprement la base de données.


0

Cela se produit parce que vous avez peut-être copié le dossier de base de données du dossier / var / lib / mysql d'un autre serveur vers votre serveur. Mais vous n'avez pas copié ces fichiers: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Donc vous pouvez créer une nouvelle base de données et des tables, vous pouvez les supprimer, mais vous ne pouvez pas supprimer les bases de données que vous avez copiées à partir d'un autre serveur et vous ne pouvez pas non plus explorer la même base de données que vous avez copiée à partir d'un autre serveur. J'ai donc également copié ces fichiers: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 après cela, tout a fonctionné.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.