错误原因:无效(旧?)表或数据库名称“丢失+找到”


8

我的MySQL日志显示重复的错误:

141223  5:47:21 [ERROR] Invalid (old?) table or database name 'lost+found'

我有一个名为的数据库,#mysql50#lost+found但似乎无法删除它。

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| maindatabas         |
| maindatabas_help    |
| maindatabas_tracker |
| gitlabhq_production |
| locations           |
| #mysql50#lost+found |
| mysql               |
| osticket            |
| performance_schema  |
+---------------------+
10 rows in set (0.00 sec)

mysql> DROP DATABASE `#mysql50#lost+found`;
ERROR 1008 (HY000): Can't drop database '#mysql50#lost+found'; database doesn't exist
mysql>

我正在运行服务器版本:5.5.40,由Centos 6上的IUS社区项目分发。

每个MySQL在CentOS 6x(不是5x)上运行非常慢,我的datadir在ext3上带有barrier = 0选项。

是什么导致此错误,如何消除该错误?

Answers:


14

在我看来,您datadir位于自己的文件系统中。

像Unix下的大多数FS一样,Ext文件系统在其根目录下有一个名为的目录lost+found。它的存在是为了在出现不一致的文件系统时(例如,参见https://unix.stackexchange.com/ Questions / 18154 / linux-and-unix中失物招领文件夹的用途是什么,以获取更多详细信息)。此目的在灾难恢复中很重要,因此您不应删除该目录。

当将包含该目录的文件系统安装在其上的安装点完全交给希望该安装点中的所有内容都属于该应用程序的应用程序时,就会出现问题。MySQL就是这样一种,它试图将lost+found目录解释为与数据库相关的东西,并且(并非无理)失败。

最好的选择是永远不要将整个FS专用于某个应用程序,而是将FS挂载在某些非特定于应用程序的挂载点上,例如/data1,在其下创建一个子目录,例如/data1/mysql,然后重新配置应用程序以将该目录用作其目录。数据目录。


12

MadHatter很好地解释了错误。但是自那以后,时代发生了变化,现在MySQL(从5.6.3版本开始)可以选择忽略此目录。只需将此语句添加到您的/etc/mysql/my.cnf文件中:

ignore-db-dir=lost+found

MySQL重新启动后,您可以使用以下命令进行检查:

show global variables like 'ignore_db_dirs';

如果要忽略多个目录,则需要分别为每个目录指定选项。

资料来源:http : //www.chriscalender.com/ignoring-the-lostfound-directory-in-your-datadir/


3

如果您正在使用MariaDB,则my.cnf在CentOS 7.2下的位置在

/etc/my.cnf

您可以使用重新启动服务

systemctl restart mariadb.service

ignore-db-dir应该放在[mysqld]部分下,而不应该放在[mysqld_safe]下。

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

ignore-db-dir=lost+found

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

1

由于我们的MySQL还不了解ignore_db_dirs,所以我做到了

# chmod 0 lost+found

解决了这个问题。


0

MariaDb是ignore_db_dirs MySQL是ignore_db_dir-没有“ s”

参见https://mariadb.com/kb/zh-CN/library/server-system-variables/#ignore_db_dirs

我有一个隐藏的目录,如下所示

mysql50#.local

所以在etc / my.cnf中-对于MariaDB

[mysqld] ignore_db_dirs = .local

并重新启动数据库服务器-然后在SHOW DATABASES命令中检查数据库是否不再存在,或者与MariaDB一起从命令行中找到“ mysqlshow”

然后,您可以删除目录和/ var / lib / mysql中的目录,然后重新编辑/etc/my.cnf文件并注释掉命令或将其删除,然后再次重新启动服务器-问题已解决

请勿在FIRST =上面执行此操作而直接删除不需要的目录,因为服务器保留的数据存储将被破坏,并且您可能无法重新启动,除非必须删除所有数据库并从备份或更糟的情况下还原数据库-这就是大房子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.