Помилка видалення бази даних (Неможливо rmdir '.test \', помилка: 17)


124

В основному мене навчали, як створити кореневий пароль, використовуючи команду "mysqladmin -u root -p пароль", це робилося через редактор команд Windows. Тепер наступним процесом було відображення баз даних за замовчуванням (info. Schema, mysql та тест), що було досягнуто за допомогою "SHOW DATABASES;"

Але згідно з книгою, нам довелося видалити зайвий тестовий файл, і з’являється наступна помилка:

Помилка видалення бази даних (Неможливо rmdir '.test \', помилка: 17)

Команда, використана для використання, була DROP DATABASE test;

Я використовую MYSQL та PHPMYADMIN. Будь-яка допомога, як скинути файл без помилок?


Чи користувач MySQL безумовно має право власності на відповідний каталог даних?
Джон Паркер

Оновлення. Я створив нову базу даних з PHPMYADMIN і використав команду в редакторі команд, вона працювала без цього разу помилки. Редагувати: Міддапарка, я справді ще не торкнувся цієї частини. Я не знаю, за замовчуванням, що таке дозвіл.
Сид

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

можливий дублікат того, як скинути базу даних
woz

Відповіді:


163

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

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

MySQL відображає повідомлення про помилку, коли він не може видалити каталог

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


1
Спасибі, Шакти Сінг. Я скинув таблицю "тесту", відвідавши PHPMYADMIN, але мені дуже хотілося це зробити через редактор команд. Напевно, я намагався видаляти один і той же файл знову і знову, тому помилка. Я створив нову БД і ввів команду DROP DATABASE, вона працювала!
Sid

2
Зверніть увагу , що ви дійсно можете тільки видалити каталог самостійно , якщо база даних тільки таблиці MyISAM
NOS

У моєму випадку мені довелося logoutі loginзнову, щоб побачити, як база даних зникла.
Anas Azeem

5
Де саме знаходяться файли`?
Чорний

Я створив файли в каталозі баз даних. Мою проблему вирішено після видалення цих файлів.
захід

37

Я зіткнувся з цим самим випуском на новій установці mysql 5.5 на mac. Я спробував скинути тестову схему і отримав повідомлення про помилку 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, команда баз даних drop вдалася.

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


3
Див . Помилку MySQL № 62443 . Це помилка MySQL, представлена ​​близько 5.5.11 через обмеження в cmake. Як ви сказали, вирішення завдання - це видалення даних \ test \ .empty
Джон Маккарті

2
у windows для мене це було: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

Перейдіть до файлу datadir для встановлення mysql та вкажіть бази даних вручну. Це може бути

/usr/local/var/mysql

Тоді,

rm -R <Your DB name>

Щоб перевірити даніdir на вашу установку,

vim the mysql.server file and find it there.

7
Я запускаю linux mint з mysql 5.5.34-0ubuntu0.13.04.1, і вони зберігають його під / var / lib / mysql. Я впевнений, що для різних дистрибутивів це інакше.
Крейг Шмідт

1
Дякую, що повідомили мені, де був каталог !!
Sankalp Singha

Для мене працює :)
Учень

працював для мене спробуйте rm -R ім'я бази даних, потім перезавантажте phpmyadmin
Vikas Kandari,


12

Якщо це XAMPP, виконайте наступне:

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

Сподіваюся, це допомагає.


+1 Це добре працює на mac, якщо ви використовуєте змонтований XAMPP на ньому. відкрийте термінал через додаток (змонтований додаток xampp) та дотримуйтесь інструкції, наведеної вище.
Боббі Сокира

Це допомогло мені знову :)
Боббі Сокира

8

Я щойно зіткнувся з цією проблемою з WAMP та phpMyAdmin, який поставляється разом із цим. Щоб видалити базу даних і усунути помилку. Я зайшовC:\wamp\bin\mysql\mysql5.5.24\data\ і видалив папку для бази даних, про яку йдеться.

Потім я оновив сторінку на phpMyAdmin, і бази даних вже не було.


4

Просто для доповнення до відповідей поки що: У Windows 10 файли даних зберігаються тут ...

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

У вашій базі даних будуть каталоги для кожної схеми. Вам потрібно буде зайти всередину схеми, яку ви намагаєтеся скинути, видалити вручну всі зайві файли, а потім спробувати команду drop ще раз.

Будь-які зміни робочого столу відносно бази даних зберігатимуться в цьому місці. Наприклад, у мене виникла помилка після здійснення зворотної інженерної роботи на одній із моїх баз даних та збереження змін, які зберігаються у файлі .mwb у цьому місці.


1

Ви можете видалити дані в каталозі sql.

Для мене я використовував AMPPS на Windows 10. Я перейшов до каталогу встановлення AMPP. для мене це було:

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

тому що я встановив його на другому накопичувачі.

Потім оновіть свій SQL-клієнт, і ви побачите, що він пропав.


1

Можливо, вам доведеться перевірити дві речі.

1- Дозвіл Foleder бази даних даних, яку ви хочете видалити, повинна мати того самого власника, що і процес mysql.

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

Після цього підключіть ваш mysql cli та запустіть команду drop database знову.


1

Пройдіть це і видаліть відповідні файли кешу у вибраному db, після чого ви зможете скинути базу даних

Спочатку знайдіть свій каталог даних MySQL, що містить обрану БД

Linux

  • Відкрийте файл конфігурації MySQL: менше /etc/my.cnf
  • Шукайте термін "datadir": / datadir

  • Якщо він існує, він виділить рядок, який пише: datadir = [шлях]

  • Ви також можете вручну шукати цей рядок. Зазвичай він може бути знайдений під заголовком розділу [mysqld], але його не обов'язково потрібно знайти там.

  • Якщо цього рядка не існує, за умовчанням MySQL буде: / var / lib / mysql.

Windows 1. Відкрийте файл конфігурації MySQL у Блокноті: my.ini

My.ini буде розташований у папці програми MySQL, де б він не був встановлений. Якщо ви не встановили MySQL, використовуйте функцію "пошук" для пошуку my.ini. Ви також можете його вручну шукати, перейшовши на [диск]: \ програмні файли \ MySQL \ MySQL Server 5.5.

  1. Проведіть пошук у Блокноті, щоб знайти термін "datadir".

  2. Якщо він існує, він виділить рядок, який пише: datadir = [шлях]

  3. Ви також можете вручну шукати цей рядок. Зазвичай він може бути знайдений під заголовком розділу [mysqld], але його не обов'язково потрібно знайти там.

  4. Якщо цього рядка не існує, ви, ймовірно, знайдете його в розділі [диск]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

ПРИМІТКА. Папка "ProgramData" може бути прихованою. Можливо, вам доведеться ввести явний шлях у Windows Explore


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

Команда буде вибирати значення лише із внутрішньої бази даних_schema інформації MySQL та відключає табличний вихід та заголовки стовпців.

Вихід на 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

Хмод спочатку, а потім

sudo rm -rf test/NOTEMPTY

Немає проблем із завантаженням баз даних після цього


0

просто перейдіть до каталогу даних у моєму випадку шлях "wamp \ bin \ mysql \ mysql5.6.17 \ data", тут ви побачите всі папки баз даних, просто видаліть цю папку вашої бази даних, db автоматично вивільниться :)


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 Отже ви можете створити нові db та таблиці, ви можете скинути їх, але ви не можете скинути бази даних, скопійовані з іншого сервера, і ви також не можете вивчити ту саму базу даних, яку ви скопіювали з іншого сервера. Тож я також скопіював ці файли: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 після цього все спрацювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.