【问题标题】:Error Dropping Database (Can't rmdir '.test\', errno: 17)删除数据库时出错(无法 rmdir '.test\',errno: 17)
【发布时间】:2011-06-02 20:05:44
【问题描述】:

基本上,我被教导如何使用“mysqladmin -u root -p 密码”命令创建 root 密码,这都是通过 windows 命令编辑器完成的。现在,下一个过程是显示使用“SHOW DATABASES;”实现的默认数据库(info.schema、mysql 和 test)

但是按照书上的说法,我们不得不删除多余的测试文件,弹出如下错误:

删除数据库时出错(无法 rmdir '.test\',errno: 17)

使用的命令是DROP DATABASE test;

我正在使用 MYSQL 和 PHPMYADMIN。有关如何正确删除文件的任何帮助?

【问题讨论】:

  • MySQL用户是否确实拥有相关数据目录的所有权?
  • 更新。我从 PHPMYADMIN 创建了一个新数据库,并在命令编辑器中使用了该命令,这次它没有弹出错误。编辑:Middaparka,我真的还没有接触过那部分。我不知道,默认情况下,授予的权限是什么。
  • 我猜新的 MySQL 版本确实不会删除数据库 TEST 而是尝试删除 mysql 目录/bin 中的文件夹“TEST”,这只是添加到您的学习过程中的另一种解决方案。 ....
  • how to drop database的可能重复

标签: mysql sql phpmyadmin


【解决方案1】:

数据库由数据目录下的一个目录表示(通常是/var/lib/mysql),该目录是用来存储表数据的。

DROP DATABASE 语句将删除所有表文件,然后删除代表数据库的目录。但是,它不会删除非表文件,从而无法删除目录。

MySQL 在无法删除目录时显示错误消息

您可以真正手动删除数据库,方法是删除数据库目录中的所有剩余文件,然后删除目录本身。

【讨论】:

  • 谢谢,Shakti Singh。我通过访问 PHPMYADMIN 删除了“测试”表,但我真的很想通过命令编辑器来完成。我想我尝试一次又一次地删除同一个文件,所以错误。我创建了一个新数据库并输入了 DROP DATABASE 命令,它成功了!
  • 请注意,如果数据库只有 MyISAM 表,您实际上只能自己删除目录
  • 在我的情况下,我必须logout,然后再次login,才能看到数据库消失了。
  • 文件到底在哪里?
  • 我已经在数据库目录中创建了文件。删除这些文件后,我的问题得到解决。
【解决方案2】:

我在 Mac 上新安装 mysql 5.5 时遇到了同样的问题。我试图删除测试模式并收到 errno 17 消息。 errno 17 是某些 posix os 函数返回的错误,表明文件存在于不应该存在的位置。在data目录中,我发现了一个奇怪的文件“.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

一旦我 rm'd .empty 文件,drop database 命令就成功了。

我不知道 .empty 文件是从哪里来的;如前所述,这是一个新的 mysql 安装。可能是安装过程出了点问题。

【讨论】:

  • MySQL Bug #62443。由于 cmake 的限制,这是 5.5.11 左右引入的 MySQL 错误。如您所说,一种解决方法是删除 data\test\.empty
  • 在 Windows 中对我来说是:C:\wamp\bin\mysql\mysql5.5.24\data\test\
【解决方案3】:

转到 datadir* 进行 mysql 安装并手动 rm 数据库。可以是

/usr/local/var/mysql

那么,

rm -R <Your DB name>

注意事项:

* 为您的安装检查 datadir,

vim the mysql.server file and find it there.

【讨论】:

  • 我正在使用 mysql 5.5.34-0ubuntu0.13.04.1 运行 linux mint,他们将其存储在 /var/lib/mysql 下。我敢肯定不同发行版的情况会有所不同。
  • 感谢您告诉我目录在哪里!!
  • 为我工作 :)
  • 为我工作尝试 rm -R databasename 然后重新加载 phpmyadmin
【解决方案4】:

对于 phpmyadmin,转到 xampp\mysql\data 并简单地删除数据库文件夹。为我工作!

【讨论】:

    【解决方案5】:

    如果是 XAMPP,请执行以下操作:

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

    希望这会有所帮助。

    【讨论】:

    • +1 如果您在其上使用已安装的 XAMPP,这在 mac 上运行良好。通过应用程序(安装的 xampp 应用程序)打开终端并按照上面的指南进行操作。
    • 这再次帮助了我:)
    【解决方案6】:

    我刚刚在使用 WAMP 和它附带的 phpMyAdmin 时遇到了这个问题。删除数据库并使错误消失。我进入C:\wamp\bin\mysql\mysql5.5.24\data\ 并删除了相关数据库的文件夹。

    然后我在phpMyAdmin刷新页面,数据库就没了。

    【讨论】:

      【解决方案7】:

      只是补充一下到目前为止的响应:在 Windows 10 中,数据文件保存在这里...

      C:\ProgramData\MySQL\MySQL 服务器 [m.n]\data

      数据库中的每个模式都有目录。您将需要进入您尝试删除的架构,手动删除任何多余的文件,然后再次尝试 drop 命令。

      针对数据库的任何工作台更改都将存储在此位置。例如,在对我的一个数据库进行逆向工程练习并将更改保存在此位置的 .mwb 文件中后,我遇到了此错误。

      【讨论】:

        【解决方案8】:

        可以删除sql目录下的数据。

        对我来说,我在 Windows 10 上使用 AMPPS。 我去了AMPPs安装目录。 对我来说是:

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

        因为我已将它安装在我的辅助驱动器上。

        然后刷新你的 SQL 客户端,你会发现它已经消失了。

        【讨论】:

          【解决方案9】:

          您可能需要检查两件事。

          1- 数据库文件夹权限要删除的数据库必须与mysql进程拥有相同的所有者。

          2- 目录必须为空进入mysql数据目录并验证目录是否为空

          然后连接你的 mysql cli 并再次运行 drop database 命令。

          【讨论】:

            【解决方案10】:

            通过此操作并删除所选数据库中的相应缓存文件,然后您可以删除数据库

            首先找到包含所选数据库的 MySQL 数据目录

            Linux

            • 打开MySQL的配置文件:less /etc/my.cnf
            • 搜索词“datadir”:/datadir

            • 如果存在,它将突出显示一行内容:datadir = [path]

            • 您也可以手动查找该行。它通常可以在 [mysqld] 的部分标题下找到,但不一定必须在那里找到。

            • 如果该行不存在,则 MySQL 将默认为:/var/lib/mysql。

            窗户 1.在记事本中打开MySQL的配置文件:my.ini

            my.ini 将位于 MySQL 程序文件夹中,即安装它的位置。如果您没有安装 MySQL,则使用 Windows 的“搜索”功能来查找 my.ini。您也可以通过浏览到 [drive]:\Program Files\MySQL\MySQL Server 5.5 手动搜索它。

            1. 在记事本中搜索“datadir”一词。

            2. 如果存在,它将突出显示一行内容:datadir = [path]

            3. 您也可以手动查找该行。它通常可以在 [mysqld] 的部分标题下找到,但不一定必须在那里找到。

            4. 如果该行不存在,那么您可能会在 [drive]:\ProgramData\MySQL\MySQL Server 5.5\data 下找到它。

            注意:“ProgramData”文件夹可能被隐藏。您可能必须在 Windows 探索中键入显式路径

            【讨论】:

              【解决方案11】:
              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
              

              根据您的结果更改路径

              【讨论】:

                【解决方案12】:

                在我的情况下,我在phpMyAdmin 的数据库下没有看到任何表我正在使用Wamp server 但是当我检查C:\wamp\bin\mysql\mysql5.6.12\data 下的目录时,当我手动删除这个文件时发现了这个employed.ibd能够顺利从phpMyAdmindrop 数据库,没有任何问题。

                【讨论】:

                  【解决方案13】:

                  我的问题是数据库目录中的残留转储文件。该文件可能是在我一直在进行的备份脚本测试期间生成的。 一旦我手动删除了文件,我就可以删除数据库。

                  【讨论】:

                    【解决方案14】:

                    我遇到了同样的问题(mac 上的 mysql 5.6),在删除数据库时出现“can't rmdir..”错误。留下一个空的数据库目录是不可能摆脱的。感谢@Framework 和@Beel 的解决方案。

                    我首先在 (/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
                    

                    之后删除数据库没有问题

                    【讨论】:

                      【解决方案15】:

                      在我的情况下,只需转到数据目录路径是“wamp\bin\mysql\mysql5.6.17\data”,您将看到所有数据库文件夹只需删除这个您的数据库文件夹,db 将自动下垂:)

                      【讨论】:

                        【解决方案16】:

                        我遇到了这个问题,当我检查数据库目录时,有许多exp 文件(ibdfrm 文件已被删除)。列出文件以查看其属性(因为所有者已经对文​​件具有 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 删除文件可以彻底删除数据库。

                        【讨论】:

                          【解决方案17】:

                          这是因为您可能已将 /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 之后一切正常。

                          【讨论】:

                            【解决方案18】:

                            来自 Manjaro/Arch 的任何人,使用 PHP8 安装 XAMPP 然后降级到 7.4 都会收到此错误。要修复,只需使用 Thunar 以 root 用户身份转到 /opt/lampp/var/mysql/,然后删除具有相同数据库名称的数据库文件,并且数据库应该已经消失。您可以使用 PhpMyAdmin 获取数据库名称。

                            【讨论】:

                              猜你喜欢
                              • 2018-04-27
                              • 2012-08-25
                              • 1970-01-01
                              • 2016-08-20
                              • 2013-07-30
                              • 2015-06-02
                              • 2022-01-24
                              • 1970-01-01
                              • 2016-12-24
                              相关资源
                              最近更新 更多