Astuce MySQL/MariaDB : Corriger l'erreur 1010 à la suppression d'une base.
Cela arrive assez rarement, mais cela arrive tout de même. De temps en temps, je n'arrive pas à supprimer une base de données et renvoie lorsqu'on exécute la commande
mysql> drop database MaDatabase;
le résultat
ERROR 1010 (HY000): Error dropping database (can't rmdir './MaDatabase/', errno: 17)
Dans ce cas, pas de stress, la solution est très souvent la même, un fichier est coincé dans le dossier de la base de données et empêche la suppression.
Si vous ne savez pas ou MySQL/MariaDB stocke ses fichiers, profitez d'être connecté pour regarder le chemin vers les données.
mysql> SHOW VARIABLES WHERE Variable_Name LIKE "datadir";
Voici le résultat avec une installation de MariaDB sur macOS
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| datadir | /usr/local/var/mysql/ |
+---------------+-----------------------+
1 row in set (0.001 sec)
Le chemin peut être différent selon les installations et les systèmes.
Il suffit donc d'aller dans le dossier
cd /usr/local/var/mysql/
De vérifier que le dossier de la base est toujours là.
ls -l
Puis regardons ce qu'il y a dedans (en vérifiant les fichiers invisibles)
ls -la MaDatabase
Voici le résultat sur la dernière base de données en question
total 88
drwx------ 2 mysql mysql 4096 Sep 16 18:36 .
drwx------ 60 mysql mysql 4096 Sep 16 18:36 ..
-rw-rw-rw- 1 mysql mysql 81578 Nov 17 2014 stats.txt
Un fichier stats.txt qui traine et qui ne veut pas se supprimer.
La solution est rédhibitoire, le supprimer avec les droits administrateurs
rm -rf MaDatabase/stats.txt
Puis retourner dans MySQL pour finir le travail
mysql> drop database MaDatabase;
La réponse est enfin celle espérée
Query OK, 0 rows affected (0.00 sec)
La base de donnée n'existe plus.