Mysql-删除名称中带有#的数据库

Mysql-删除名称中带有#的数据库

如何删除名称中带有 # 的数据库?例如:#mysql50#mysql.backup

我不知道谁可能创建了它,但它确实发生了。当我尝试 DROP DATABASE 名称时,出现错误:

错误 1102 (42000):数据库名称不正确

感谢您的帮助。

答案1

您可能在数据目录中隐藏了文件夹。请执行 ls -larth 并删除 mysql.backup 目录。

默认情况下,mysql 数据目录内的任何文件夹都将被读取为数据库,并显示在“显示数据库”中。

答案2

您应该始终使用反引号来转义数据库名称,至少在有疑问的情况下。

DROP DATABASE `#mysql50#mysql.backup`

答案3

MySQL datadir 中的任何目录都被 MySQL 视为数据库。您很可能有专门的 /var/lib/mysql 挂载点,文件系统为 ext{4,3,2},并且存在默认的“lost+found”目录(lost+found 目录由文件系统检查工具 (fsck) 使用)。您可以让 MySQL 借助以下方法将此目录视为目录而不是数据库忽略数据库目录my.cnf 中的选项:

ignore_db_dir=lost+found

在您的特定(#mysql50#mysql.backup)情况下,它将是:

ignore_db_dir=mysql.backup

答案4

我也遇到过这个问题。我可以(也确实)将 .rocksdb 数据库文件夹移出 /var/lib/mysql,但一旦重新启动 mariadb,它就会重新创建该死的东西。这对我的 sql 备份程序造成了严重破坏。最终的修复是:

  1. 停止 mariadb 并删除/var/lib/mysql/.rocksdb
  2. 编辑 /etc/my.cnf.d/rocksdb.cnf
  3. 注释掉“plugin-load-add=ha_rocksdb.so”
  4. 重新启动 mariadb 5)从此过上幸福的生活。

相关内容