Ошибка при удалении базы данных (невозможно rmdir '.test \', errno: 17)


124

По сути, меня учили, как создать пароль root с помощью команды «mysqladmin -u root -p password», все это делалось через редактор команд Windows. Теперь следующим процессом было отображение баз данных по умолчанию (info. Schema, mysql и test), что было достигнуто с помощью команды «SHOW DATABASES;»

Но согласно книге, нам пришлось удалить избыточный тестовый файл, и выскочит следующая ошибка:

Ошибка при удалении базы данных (невозможно rmdir '.test \', errno: 17)

Использовалась команда: DROP DATABASE test;

Я использую MYSQL и PHPMYADMIN. Любая помощь в том, как сбросить файл без ошибок?


Действительно ли пользователь MySQL владеет соответствующим каталогом данных?
Джон Паркер

Обновить. Я создал новую базу данных из PHPMYADMIN и использовал команду в редакторе команд, на этот раз она сработала без появления ошибки. Изменить: Миддапарка, я еще не коснулся этой части. По умолчанию я не знаю, какое разрешение дано.
Сид,

Я предполагаю, что новые версии MySQL действительно не удаляют базу данных TEST, вместо этого попробуйте удалить папку «TEST» в вашем каталоге / bin mysql, это просто еще одно решение для этого, чтобы добавить к вашему процессу обучения ...
amenko

возможный дубликат того, как удалить базу данных
woz

Ответы:


163

База данных представлена ​​каталогом в каталоге данных (обычно /var/lib/mysql), а каталог предназначен для хранения табличных данных.

Оператор DROP DATABASEудалит все файлы таблиц, а затем удалит каталог, представляющий базу данных. Однако при этом не удаляются файлы, не являющиеся таблицами, что делает невозможным удаление каталога.

MySQL отображает сообщение об ошибке, когда не может удалить каталог

вы действительно можете удалить базу данных вручную, удалив все оставшиеся файлы в каталоге базы данных, а затем и сам каталог.


1
Спасибо, Шакти Сингх. Я отбросил таблицу «test», посетив PHPMYADMIN, но мне очень хотелось сделать это через редактор команд. Думаю, я пытался удалить один и тот же файл снова и снова, поэтому ошибка. Я создал новую БД и ввел команду DROP DATABASE, это сработало!
Сид,

2
Обратите внимание, что вы действительно можете удалить каталог самостоятельно только в том случае, если в базе данных есть только таблицы MyISAM

В моем случае мне пришлось снова logoutи loginснова увидеть, что база данных исчезла.
Анас Азим

5
Где именно файлы?
Black

Я создал файлы в каталоге базы данных. Моя проблема решена после удаления этих файлов.
Захид

37

Я столкнулся с этой же проблемой при новой установке mysql 5.5 на Mac. Я попытался отбросить тестовую схему и получил сообщение errno 17. errno 17 - это ошибка, возвращаемая некоторыми функциями posix os, указывающая, что файл существует там, где его не должно быть. В каталоге данных я обнаружил странный файл «.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

Как только я удалил пустой файл, команда удаления базы данных завершилась успешно.

Я не знаю, откуда взялся файл .empty; как уже отмечалось, это была новая установка mysql. Возможно, что-то пошло не так в процессе установки.


3
См. Ошибку MySQL № 62443 . Это ошибка MySQL, появившаяся около 5.5.11 из-за ограничения в cmake. Как вы сказали, обходной путь - удалить data \ test \ .empty
Джон Маккарти,

2
в Windows для меня это было: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

Перейдите в каталог данных для вашей установки mysql и вручную перезапустите базы данных. Может быть

/usr/local/var/mysql

Затем,

rm -R <Your DB name>

Чтобы проверить datadir для вашей установки,

vim the mysql.server file and find it there.

7
Я запускаю linux mint с mysql 5.5.34-0ubuntu0.13.04.1, и они хранят его в / var / lib / mysql. Я уверен, что для разных дистрибутивов это разное.
Craig Schmidt

1
Спасибо, что сообщили мне, где находится каталог !!
Sankalp Singha

У меня работает :)
Ученик

сработал для меня, попробуйте rm -R databasename, затем перезагрузите phpmyadmin
Викас Кандари


12

Если это XAMPP, сделайте следующее:

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

Надеюсь это поможет.


+1 Это хорошо работает на Mac, если вы используете на нем установленный XAMPP. откройте терминал через приложение (смонтированное приложение xampp) и следуйте приведенному выше руководству.
Bobby Axe

Это снова помогло мне :)
Bobby Axe

8

Я только что столкнулся с этой проблемой с WAMP и прилагаемым к нему phpMyAdmin. Чтобы удалить базу данных и устранить ошибку. Я вошел C:\wamp\bin\mysql\mysql5.5.24\data\и удалил папку для рассматриваемой базы данных.

Затем я обновил страницу в phpMyAdmin, и база данных исчезла.


4

Просто добавлю к ответам: в Windows 10 файлы данных хранятся здесь ...

C: \ ProgramData \ MySQL \ Сервер MySQL [мн] \ данные

Для каждой схемы в вашей базе данных будут каталоги. Вам нужно будет войти в схему, которую вы пытаетесь удалить, вручную удалить все лишние файлы, а затем снова попробовать команду drop.

Любые изменения рабочей среды в базе данных будут храниться в этом месте. Например, у меня возникла эта ошибка после выполнения обратного проектирования в одной из моих баз данных и сохранения изменений, которые сохраняются в файле .mwb в этом месте.


1

Вы можете удалить данные в каталоге sql.

Что касается меня, я использовал AMPPS в Windows 10. Я пошел в каталог установки AMPP. для меня это было:

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

потому что он установлен на моем дополнительном диске.

Затем обновите свой SQL-клиент, и вы увидите, что его больше нет.


1

Возможно, вам потребуется проверить две вещи.

1- Разрешение хранителя базы данных База данных, которую вы хотите удалить, должна иметь того же владельца, что и процесс mysql.

2- Каталог должен быть пустым. Перейдите в каталог данных mysql и убедитесь, что каталог пуст.

После этого подключите mysql cli и снова запустите команду drop database.


1

Пройдите через это и удалите соответствующие файлы кеша в выбранной базе данных, а затем после того, как вы сможете удалить свою базу данных

Сначала найдите каталог данных MySQL, содержащий выбранную вами БД

Linux

  • Откройте файл конфигурации MySQL: меньше /etc/my.cnf
  • Найдите термин "datadir": / datadir

  • Если он существует, он выделит строку, которая гласит: datadir = [путь]

  • Вы также можете вручную найти эту строку. Обычно его можно найти в заголовке раздела [mysqld], но не обязательно там.

  • Если эта строка не существует, MySQL по умолчанию будет: / var / lib / mysql.

Windows 1. Откройте файл конфигурации MySQL в Блокноте: my.ini

My.ini будет находиться в папке программы MySQL, где бы он ни был установлен. Если вы не устанавливали MySQL, воспользуйтесь функцией «поиска» Windows, чтобы найти my.ini. Вы также можете найти его вручную, перейдя на [диск]: \ Program Files \ MySQL \ MySQL Server 5.5.

  1. Выполните поиск в Блокноте, чтобы найти термин «datadir».

  2. Если он существует, он выделит строку, которая гласит: datadir = [путь]

  3. Вы также можете вручную найти эту строку. Обычно его можно найти в заголовке раздела [mysqld], но не обязательно там.

  4. Если эта строка не существует, вы, вероятно, найдете ее в [диск]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

ПРИМЕЧАНИЕ. Папка «ProgramData» может быть скрыта. Возможно, вам придется ввести явный путь в Windows Explorer


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

Команда выберет значение только из внутренней базы данных MySQL information_schema и отключит табличные данные и заголовки столбцов.

Вывод на Linux [мой результат]:

/var/lib/mysql

или

mysql> select @@datadir;

на MYSQL CLI

а потом

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

изменить путь в зависимости от вашего результата


0

В моем случае я не видел никаких таблиц в моей базе данных, phpMyAdminкоторую я использую, Wamp serverно когда я проверил каталог, C:\wamp\bin\mysql\mysql5.6.12\dataя обнаружил это, employed.ibdкогда я удалил этот файл вручную, я смог без проблем перейти dropв базу данных phpMyAdmin.


0

В моем случае проблема заключалась в остаточном файле дампа в каталоге базы данных. Этот файл, вероятно, был создан во время теста сценария резервного копирования, над которым я работал. Как только я вручную удалил файл, я мог удалить базу данных.


0

У меня была такая же проблема (mysql 5.6 на Mac) с ошибками «не могу rmdir ..» при удалении баз данных. Оставить пустой каталог базы данных, от которого невозможно избавиться. Спасибо @Framework и @Beel за решения.

Сначала я удалил каталог db из Терминала в (/ Applications / XAMPP / xamppfiles / var / mysql).

Для дальнейших падений db я также удалил пустой тестовый файл. В моем случае файл назывался NOTEMPTY, но все еще содержал 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, а затем

sudo rm -rf test/NOTEMPTY

После этого нет проблем с удалением баз данных


0

просто перейдите в каталог данных, в моем случае путь - "wamp \ bin \ mysql \ mysql5.6.17 \ data", здесь вы увидите все папки баз данных, просто удалите эту папку базы данных, база данных автоматически опустится :)


0

Я столкнулся с этой проблемой, и когда я проверил каталог базы данных, существует целый ряд expфайлов ( ibdи frmфайлы были удалены). Составление списка файлов для просмотра их атрибутов (поскольку владелец уже имел права rw для файлов)

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

Страница руководства говорит

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

Вы действительно можете использовать chattr -eэти файлы, но mysql по-прежнему не позволит вам удалить базу данных. Однако удаление файлов с помощью rmпозволяет полностью удалить базу данных.


0

Это происходит из-за того, что вы могли скопировать папку базы данных папки / var / lib / mysql с другого сервера на свой сервер. Но вы не скопировали эти файлы: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Итак вы можете создать новую базу данных и таблицы, которые вы можете удалить, но вы не можете удалить базы данных, которые вы скопировали с другого сервера, и вы также не можете исследовать ту же базу данных, которую вы скопировали с другого сервера. Поэтому я также скопировал эти файлы: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1, после этого все заработало.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.