Kesalahan Menjatuhkan Database (Tidak dapat rmdir '.test \', errno: 17)

124

Pada dasarnya, saya diajari tentang cara membuat kata sandi root menggunakan perintah "mysqladmin -u root -p password", ini dilakukan melalui editor perintah windows. Sekarang, proses selanjutnya adalah menampilkan database default (info. Schema, mysql dan test) yang dicapai dengan menggunakan "SHOW DATABASES;"

Tetapi menurut buku itu, kami harus menghapus file tes yang berlebihan dan kesalahan berikut muncul:

Kesalahan Menjatuhkan Database (Tidak dapat rmdir '.test \', errno: 17)

Perintah yang digunakan adalah DROP DATABASE test;

Saya menggunakan MYSQL dan PHPMYADMIN. Adakah bantuan tentang cara menjatuhkan file tanpa kesalahan?

Sid
sumber
Apakah pengguna MySQL pasti memiliki kepemilikan direktori data yang relevan?
John Parker
Memperbarui. Saya membuat database baru dari PHPMYADMIN dan menggunakan perintah di editor perintah, kali ini berfungsi tanpa memunculkan kesalahan. Edit: Middaparka, saya benar-benar belum menyentuh bagian itu. Saya tidak tahu, secara default, apa izin yang diberikan.
Sid
Saya kira versi MySQL baru benar-benar tidak menghapus TEST database, tetapi coba hapus folder "TEST" di direktori / bin mysql Anda, itu hanya solusi lain untuk ini untuk ditambahkan ke proses pembelajaran Anda .....
amenko
kemungkinan duplikat dari cara menjatuhkan database
woz

Jawaban:

163

Database diwakili oleh direktori di bawah direktori data (biasanya /var/lib/mysql), dan direktori tersebut dimaksudkan untuk penyimpanan data tabel.

The DROP DATABASEpernyataan akan menghapus semua file meja dan kemudian menghapus direktori yang diwakili database. Namun, ini tidak akan menghapus file non-tabel, sehingga tidak memungkinkan untuk menghapus direktori.

MySQL menampilkan pesan kesalahan jika tidak dapat menghapus direktori

Anda benar-benar dapat menjatuhkan database secara manual dengan menghapus file yang tersisa di direktori database dan kemudian direktori itu sendiri.

Shakti Singh
sumber
1
Terima kasih, Shakti Singh. Saya menjatuhkan tabel 'test' dengan mengunjungi PHPMYADMIN, tetapi saya benar-benar ingin melakukannya melalui editor perintah. Saya kira saya mencoba menghapus file yang sama berulang kali, jadi kesalahannya. Saya membuat DB baru dan memasukkan perintah DROP DATABASE, berhasil!
Sid
2
Perhatikan bahwa Anda hanya dapat menghapus direktori sendiri jika database hanya memiliki tabel MyISAM
nos
Dalam kasus saya, saya harus logoutdan sekali loginlagi, untuk melihat database hilang.
Anas Azeem
5
Di mana tepatnya file-file itu?
Hitam
Saya telah membuat file di direktori database. Masalah saya teratasi setelah menghapus file-file ini.
zahid
37

Saya mengalami masalah yang sama ini pada penginstalan baru mysql 5.5 di mac. Saya mencoba membatalkan skema pengujian dan mendapat pesan errno 17. errno 17 adalah kesalahan yang dikembalikan oleh beberapa fungsi os posix yang menunjukkan bahwa file ada di tempat yang seharusnya tidak ada. Di direktori data, saya menemukan file aneh ".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

Setelah saya menyimpan file .empty, perintah drop database berhasil.

Saya tidak tahu dari mana asal file .empty; seperti disebutkan, ini adalah instalasi mysql baru. Mungkin ada yang salah dalam proses penginstalan.

Beel
sumber
3
Lihat Bug MySQL # 62443 . Ini adalah bug MySQL yang diperkenalkan sekitar 5.5.11 karena batasan pada cmake. Seperti yang Anda katakan, solusinya adalah dengan menghapus data \ test \ .empty
John McCarthy
2
di windows bagi saya itu adalah: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond
34

Buka datadir untuk instalasi mysql Anda dan rm database secara manual. Bisa jadi

/usr/local/var/mysql

Kemudian,

rm -R <Your DB name>

Untuk memeriksa datadir untuk instalasi Anda,

vim the mysql.server file and find it there.
Saraf
sumber
7
Saya menjalankan linux mint dengan mysql 5.5.34-0ubuntu0.13.04.1 dan mereka menyimpannya di / var / lib / mysql. Saya yakin itu berbeda untuk distro yang berbeda.
Craig Schmidt
1
Terima kasih telah memberi tahu saya di mana direktori itu !!
Sankalp Singha
Bekerja untuk saya :)
Murid
bekerja untuk saya coba rm -R nama data kemudian muat ulang phpmyadmin
Vikas Kandari
23

Untuk phpmyadmin , buka xampp \ mysql \ data dan cukup hapus folder database. Bekerja untuk saya !!

Floccinaucinihilipilification.
sumber
12

Jika itu XAMPP, Lakukan hal berikut:

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

Semoga ini membantu.

Nasif Md. Tanjim
sumber
+1 Ini berfungsi dengan baik di mac, jika Anda menggunakan XAMPP yang terpasang di atasnya. buka terminal melalui aplikasi (mount aplikasi xampp) dan ikuti panduan di atas.
Bobby Axe
Ini Membantu Saya Lagi :)
Bobby Axe
8

Saya baru saja mengalami masalah ini dengan WAMP dan phpMyAdmin yang menyertainya. Untuk menghapus database dan menghilangkan kesalahan. Saya masuk ke C:\wamp\bin\mysql\mysql5.5.24\data\dan menghapus folder untuk database yang dimaksud.

Lalu saya menyegarkan halaman di phpMyAdmin, dan database hilang.

J86
sumber
4

Hanya untuk menambah tanggapan sejauh ini: Di ​​Windows 10, file data disimpan di sini ...

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

Akan ada direktori untuk setiap skema di database Anda. Anda akan ingin masuk ke dalam skema yang Anda coba lepaskan, hapus file yang tidak berguna secara manual lalu coba lagi perintah drop.

Setiap perubahan meja kerja terhadap database akan disimpan di lokasi ini. Misalnya, saya mengalami kesalahan ini mengikuti latihan rekayasa balik pada salah satu database saya dan menyimpan perubahan yang disimpan dalam file .mwb di lokasi ini.

IqbalHamid
sumber
1

Anda dapat menghapus data di direktori sql.

Bagi saya, saya menggunakan AMPPS di windows 10. Saya pergi ke direktori installtion AMPPs. bagi saya itu adalah:

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

karena saya sudah menginstalnya di drive sekunder saya.

Kemudian segarkan klien SQL Anda dan Anda akan melihatnya hilang.

moeiscool
sumber
1

Anda mungkin perlu memeriksa dua hal.

1- Izin Foleder Database Database yang ingin Anda hapus harus memiliki pemilik yang sama dengan proses mysql.

2- Direktori Harus kosong Buka direktori data mysql dan verifikasi bahwa direktori tersebut kosong

Setelah itu hubungkan cli mysql Anda dan jalankan kembali perintah drop database.

Mansur Ali
sumber
1

Pergi melalui ini dan hapus file cache yang sesuai di db yang dipilih kemudian setelah Anda dapat menjatuhkan database Anda

Pertama temukan Direktori Data MySQL Anda yang Mengandung DB pilihan Anda

Linux

  • Buka file konfigurasi MySQL: less /etc/my.cnf
  • Cari istilah "datadir": / datadir

  • Jika ada, itu akan menyoroti baris yang bertuliskan: datadir = [path]

  • Anda juga dapat mencari garis itu secara manual. Ini biasanya akan ditemukan di bawah judul bagian [mysqld] tetapi tidak harus ditemukan di sana.

  • Jika baris itu tidak ada, maka MySQL akan default ke: / var / lib / mysql.

Windows 1. Buka file konfigurasi MySQL di Notepad: my.ini

My.ini akan ditempatkan di folder program MySQL, di mana pun ia diinstal. Jika Anda tidak menginstal MySQL, gunakan fitur "search" Windows untuk mencari my.ini. Anda juga dapat mencarinya secara manual dengan membuka [drive]: \ Program Files \ MySQL \ MySQL Server 5.5.

  1. Lakukan pencarian di Notepad untuk menemukan istilah "datadir".

  2. Jika ada, itu akan menyoroti baris yang bertuliskan: datadir = [path]

  3. Anda juga dapat mencari garis itu secara manual. Ini biasanya akan ditemukan di bawah judul bagian [mysqld] tetapi tidak harus ditemukan di sana.

  4. Jika baris itu tidak ada, Anda mungkin akan menemukannya di [drive]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

CATATAN: Folder "ProgramData" mungkin tersembunyi. Anda mungkin harus mengetikkan jalur eksplisit ke dalam Windows Explore

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

Perintah akan memilih nilai hanya dari database information_schema internal MySQL dan menonaktifkan output tabel dan header kolom.

Output di Linux [hasil tambang]:

/var/lib/mysql

atau

mysql> select @@datadir;

di MYSQL CLI

lalu

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

ubah jalur berdasarkan hasil Anda

Jamil Noyda
sumber
0

Dalam kasus saya, saya tidak melihat tabel apa pun di bawah database saya pada yang phpMyAdminsaya gunakan Wamp servertetapi ketika saya memeriksa direktori di bawah C:\wamp\bin\mysql\mysql5.6.12\datasaya menemukan ini employed.ibdketika saya menghapus file ini secara manual, saya dapat ke dropdatabase phpMyAdmindengan lancar tanpa masalah.

Yousef Altaf
sumber
0

Saya kasus saya masalahnya adalah file dump sisa di direktori database. File itu mungkin dibuat selama pengujian skrip cadangan yang sedang saya kerjakan. Setelah saya menghapus file secara manual, saya kemudian dapat menjatuhkan database.

Ranieri Machado
sumber
0

Saya mengalami masalah yang sama (mysql 5.6 di mac) dengan kesalahan 'tidak bisa rmdir ..'- saat menjatuhkan database. Membiarkan direktori database kosong tidak mungkin dihilangkan. Terima kasih @Framework dan @Beel untuk solusinya.

Saya pertama kali menghapus direktori db dari Terminal di (/ Applications / XAMPP / xamppfiles / var / mysql).

Untuk penurunan db lebih lanjut, saya juga menghapus file tes yang kosong. Dalam kasus saya, file tersebut bernama NOTEMPTY tetapi masih mengandung 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 dulu dan kemudian

sudo rm -rf test/NOTEMPTY

Tidak ada masalah dalam menjatuhkan database setelah itu

pengguna3857472
sumber
0

cukup masuk ke direktori data di jalur kasus saya adalah "wamp \ bin \ mysql \ mysql5.6.17 \ data" di sini Anda akan melihat semua folder database hapus saja ini folder database Anda db akan otomatis terkulai :)

sms247
sumber
0

Saya mengalami masalah ini, dan ketika saya memeriksa direktori database, ada sejumlah expfile ( ibddan frmfile telah dihapus). Mendaftar file untuk melihat atributnya (karena pemilik sudah memiliki hak istimewa rw pada file)

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

Halaman manual mengatakan

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

Anda sebenarnya dapat chattr -efile-file ini, tetapi mysql tetap tidak akan membiarkan Anda menjatuhkan database. Menghapus file dengan rm, bagaimanapun, memungkinkan database untuk dijatuhkan dengan bersih.

dland
sumber
0

Itu terjadi karena Anda mungkin telah menyalin folder database / var / lib / mysql dari server lain ke server Anda. Tetapi Anda belum menyalin file ini: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 Jadi Anda dapat membuat db baru dan tabel Anda dapat menghapusnya tetapi Anda tidak dapat menghapus database yang telah Anda salin dari server lain dan Anda juga tidak dapat menjelajahi database yang sama yang Anda salin dari server lain. Jadi saya juga menyalin file itu: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 setelah itu semuanya bekerja.

Prakash Lakhara
sumber