Erro ao descartar o banco de dados (Impossível rmdir '.test \', errno: 17)


124

Basicamente, eu fui ensinado sobre como criar uma senha root usando o comando "mysqladmin -u root -p password", isso foi feito em todo o editor de comandos do Windows. Agora, o próximo processo era exibir os bancos de dados padrão (info. Schema, mysql e test) que foram alcançados usando "SHOW DATABASES;"

Mas, de acordo com o livro, tivemos que excluir o arquivo de teste redundante e o seguinte erro aparece:

Erro ao descartar o banco de dados (Impossível rmdir '.test \', errno: 17)

O comando colocado em uso foi DROP DATABASE test;

Estou usando MYSQL e PHPMYADMIN. Alguma ajuda sobre como soltar o arquivo sem erros?


O usuário do MySQL definitivamente possui a propriedade do diretório de dados relevante?
John Parker

Atualizar. Criei um novo banco de dados a partir do PHPMYADMIN e usei o comando no editor de comandos; ele funcionou sem a ocorrência do erro neste momento. Edit: Middaparka, eu realmente não toquei nessa parte ainda. Por padrão, não sei quais são as permissões concedidas.
Sid '12

Eu acho que as novas versões do MySQL realmente não excluem o banco de dados TEST, em vez disso, tente excluir a pasta "TEST" em seu diretório / bin mysql, é apenas mais uma solução para adicionar ao seu processo de aprendizado .....
amenko

possível duplicata de como descartar banco de dados
woz

Respostas:


163

Um banco de dados é representado por um diretório no diretório de dados (geralmente /var/lib/mysql) e o diretório é destinado ao armazenamento de dados da tabela.

A DROP DATABASEinstrução removerá todos os arquivos de tabela e, em seguida, o diretório que representou o banco de dados. No entanto, ele não removerá arquivos que não são de tabela e, portanto, não será possível remover o diretório.

MySQL exibe uma mensagem de erro quando não pode remover o diretório

você pode realmente eliminar o banco de dados manualmente removendo os arquivos restantes no diretório do banco de dados e depois no próprio diretório.


1
Obrigado, Shakti Singh. Larguei a tabela de 'test' visitando PHPMYADMIN, mas eu realmente queria fazê-lo através do editor de comandos. Eu acho que tentei excluir o mesmo arquivo novamente e novamente, então o erro. Criei um novo banco de dados e entrei no comando DROP DATABASE, funcionou!
Sid

2
Observe que você realmente pode remover o diretório apenas se o banco de dados tiver apenas tabelas MyISAM

No meu caso, eu precisei logoute, loginnovamente, ver o banco de dados desaparecido.
Anas Azeem

5
Onde exatamente estão os arquivos?
Preto

Eu criei os arquivos no diretório do banco de dados. Meu problema foi resolvido após a remoção desses arquivos.
zahid

37

Corri para esse mesmo problema em uma nova instalação do mysql 5.5 em um mac. Tentei largar o esquema de teste e recebi uma mensagem de erro 17. errno 17 é o erro retornado por algumas funções posix OS, indicando que existe um arquivo onde não deveria. No diretório de dados, encontrei um arquivo estranho ".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

Depois que eu rmei o arquivo .empty, o comando drop database foi bem-sucedido.

Não sei de onde veio o arquivo .empty; como observado, esta foi uma nova instalação do mysql. Talvez algo tenha dado errado no processo de instalação.


3
Veja Bug # 62443 do MySQL . Este é um bug do MySQL lançado em torno do 5.5.11 devido a uma limitação no cmake. Como você disse, a solução é remover dados \ test \ .empty
John McCarthy

2
no windows para mim era: C: \ wamp \ bin \ mysql \ mysql5.5.24 \ data \ test \
Máthé Endre-Botond

34

Vá para o datadir para sua instalação do mysql e remova os bancos de dados manualmente. Pode ser

/usr/local/var/mysql

Então,

rm -R <Your DB name>

Para verificar o datadir para sua instalação,

vim the mysql.server file and find it there.

7
Estou executando o linux mint com o mysql 5.5.34-0ubuntu0.13.04.1 e eles o armazenam em / var / lib / mysql. Tenho certeza que é diferente para diferentes distros.
Craig Schmidt

1
Obrigado por me informar onde estava o diretório !!
Sankalp Singha

Funciona para mim :)
Aluno

trabalhou para mim tentar rm -R databasename recoloque o phpmyadmin
Vikas Kandari


12

Se for XAMPP, faça o seguinte:

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

Espero que isto ajude.


+1 Isso funciona bem no mac, se você estiver usando um XAMPP montado nele. abra o terminal através do aplicativo (aplicativo xampp montado) e siga o guia acima.
Bobby Axe

Isso me ajudou novamente :)
Bobby Axe

8

Acabei de encontrar este problema com o WAMP e o phpMyAdmin que vem com ele. Para remover o banco de dados e cometer o erro desaparecer. Entrei C:\wamp\bin\mysql\mysql5.5.24\data\e excluí a pasta do banco de dados em questão.

Atualizei a página no phpMyAdmin e o banco de dados desapareceu.


4

Apenas para adicionar as respostas até o momento: no Windows 10, os arquivos de dados são mantidos aqui ...

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

Haverá diretórios para cada esquema no seu banco de dados. Você vai querer entrar no esquema que está tentando soltar, excluir manualmente todos os arquivos supérfluos e tentar o comando soltar novamente.

Quaisquer alterações do ambiente de trabalho em um banco de dados serão armazenadas neste local. Por exemplo, tive esse erro após um exercício de engenharia reversa em um dos meus bancos de dados e salvando as alterações que são armazenadas em um arquivo .mwb nesse local.


1

Você pode excluir os dados no diretório sql.

Para mim, eu estava usando o AMPPS no Windows 10. Fui ao diretório de instalação dos AMPPs. para mim foi:

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

porque eu tenho instalado na minha unidade secundária.

Em seguida, atualize seu cliente SQL e você verá que ele se foi.


1

Você pode precisar verificar duas coisas.

1- Permissão do Foleder do banco de dados O banco de dados que você deseja excluir deve ter o mesmo proprietário que o processo mysql.

2- O diretório deve estar vazio Vá para o diretório de dados do mysql e verifique se o diretório está vazio

Depois disso, conecte seu mysql cli e execute o comando drop database novamente.


1

Passe por isso e remova os arquivos de cache correspondentes no banco de dados selecionado e depois solte seu banco de dados

Primeiro encontre o diretório de dados do MySQL que contém o banco de dados selecionado

Linux

  • Abra o arquivo de configuração do MySQL: less /etc/my.cnf
  • Procure o termo "datadir": / datadir

  • Se existir, destacará uma linha que diz: datadir = [caminho]

  • Você também pode procurar manualmente essa linha. Ele normalmente seria encontrado no cabeçalho de uma seção [mysqld], mas não necessariamente precisa ser encontrado lá.

  • Se essa linha não existir, o MySQL usará como padrão: / var / lib / mysql.

Windows 1. Abra o arquivo de configuração do MySQL no Bloco de Notas: my.ini

O my.ini estará localizado na pasta do programa MySQL, que seria onde quer que fosse instalado. Se você não instalou o MySQL, use o recurso de "pesquisa" do Windows para procurar my.ini. Você também pode procurá-lo manualmente, navegando para [drive]: \ Arquivos de Programas \ MySQL \ MySQL Server 5.5.

  1. Faça uma pesquisa no bloco de notas para encontrar o termo "datadir".

  2. Se existir, destacará uma linha que diz: datadir = [caminho]

  3. Você também pode procurar manualmente essa linha. Ele normalmente seria encontrado no cabeçalho de uma seção [mysqld], mas não necessariamente precisa ser encontrado lá.

  4. Se essa linha não existir, provavelmente você a encontrará em [drive]: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data.

NOTA: A pasta "ProgramData" pode estar oculta. Pode ser necessário digitar o caminho explícito no Windows Explore


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

O comando selecionará o valor somente do banco de dados information_schema interno do MySQL e desabilitará a saída tabular e os cabeçalhos das colunas.

Saída no Linux [resultado da mina]:

/var/lib/mysql

ou

mysql> select @@datadir;

na CLI MYSQL

e depois

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

mudar o caminho com base no seu resultado


0

No meu caso, eu não vi nenhuma tabela no meu banco de dados em phpMyAdminuso, Wamp servermas quando verifiquei o diretório em C:\wamp\bin\mysql\mysql5.6.12\dataque encontrei isso employed.ibdao excluir esse arquivo manualmente, consegui acessar dropo banco de dados phpMyAdminsem problemas, sem problemas.


0

No meu caso, o problema era um arquivo de despejo residual no diretório do banco de dados. Esse arquivo provavelmente foi gerado durante um teste de script de backup em que eu estava trabalhando. Depois de excluir manualmente o arquivo, eu poderia soltar o banco de dados.


0

Eu tive o mesmo problema (mysql 5.6 no mac) com erros 'Can't rmdir ..' - ao descartar bancos de dados. Não é possível se livrar de um diretório de banco de dados vazio. Obrigado @Framework e @Beel pelas soluções.

Apaguei primeiro o diretório db do Terminal em (/ Applications / XAMPP / xamppfiles / var / mysql).

Para mais quedas de banco de dados, também excluí o arquivo de teste vazio. No meu caso, o arquivo foi chamado NOTEMPTY, mas ainda contém 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 primeiro e depois

sudo rm -rf test/NOTEMPTY

Não há problemas para descartar bancos de dados depois disso


0

basta ir para o diretório de dados no meu caso, o caminho é "wamp \ bin \ mysql \ mysql5.6.17 \ data" aqui você verá todas as pastas de bancos de dados, apenas exclua esta pasta de seu banco de dados, o banco de dados automaticamente será inclinado :)


0

Corri para esse problema e, quando fiz o check-out do diretório do banco de dados, havia vários exparquivos (os arquivos ibde frmforam removidos). Listando os arquivos para examinar seus atributos (já que o proprietário já tinha privilégios de rw nos arquivos)

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

A página de manual diz

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

Você realmente consegue chattr -eesses arquivos, mas o mysql ainda não permite que você descarte o banco de dados. Remover os arquivos com rm, no entanto, permite que o banco de dados seja descartado corretamente.


0

Isso acontece porque você pode ter copiado a pasta do banco de dados da pasta / var / lib / mysql de outro servidor para o seu servidor. Mas você não copiou esses arquivos: / var / lib / mysql / ib_buffer_pool / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile0 / var / lib / mysql / ib_logfile1 / var / lib / mysql / ibtmp1 você pode criar um novo banco de dados e tabelas que pode eliminá-los, mas não pode eliminar os bancos de dados copiados de outro servidor e também não é possível explorar o mesmo banco de dados que copiou de outro servidor. Então, eu também copiei esses arquivos: ib_buffer_pool, ibdata1, ib_logfile0, ib_logfile1, ibtmp1 depois que tudo funcionou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.