エラーの原因:無効な(古い?)テーブルまたはデータベース名 'lost + found'


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>

私はサーバーのバージョンを操作しています:Centos 6のIUSコミュニティプロジェクトによって配布された5.5.40。

パーMySQLはCentOSの6倍(5倍ではない)上で非常に遅い実行されている、私のDATADIRはバリア= 0オプションとext3の上にあります。

このエラーの原因は何ですか?また、どのようにしてそれを排除できますか?

回答:


14

あなたdatadir自身が独自のファイルシステムにいるように見えます。

UnixのほとんどのFSと同様に、extファイルシステムのルートには、というディレクトリがありlost+foundます。切り離された(つまり、内容はあるが、関連するディレクトリエントリはない)ファイルを、一貫性のないファイルシステムがfsckされたときに再接続できるようにするために存在します(たとえば、https://unix.stackexchange.com/を参照)。質問/ 18154 /詳細については、-lost-found-folder-in-linux-and-unixの目的は何ですか)。この目的はディザスタリカバリで重要であるため、ディレクトリを削除しないでください。

問題は、そのディレクトリを含むファイルシステムがマウントされているマウントポイントが、そのマウントポイント内のすべてが属していることを期待するアプリケーションに完全に渡された場合に発生します。MySQLはそのようなものの1つであり、lost+foundディレクトリをdb関連の何かとして解釈しようとし、(不当にではなく)失敗します。

最善の策は、FS全体をアプリケーション専用にすることではなく、FSをアプリケーション固有でないマウントポイントにマウント/data1することです。たとえば/data1/mysql、その下にサブディレクトリを作成し、そのディレクトリをそのディレクトリとして使用するようにアプリケーションを再構成します。 datadir。


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を使用している場合のCentOS 7.2でのmy.cnfの場所は

/etc/my.cnf

あなたはサービスを再起動することができます

systemctl restart mariadb.service

ignore-db-dirは、[mysqld_safe]セクションの下ではなく、[mysqld]セクションの下に配置する必要があります。

[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/en/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ファイルを再編集してコマンドをコメント化するか削除して、サーバーを再起動します-問題は修正されました

最初にこれを実行せずに不要なディレクトリを削除しないでください。最初に=サーバーが保持するデータストアが破損し、すべてのデータベースを削除してバックアップからデータベースを復元する必要がない限り、データストアを再起動できない可能性があります。大きな問題。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.