あるシステムでディスク容量が足りなくなって MySQL のデータディレクトリを別ディスクに追い出すことにした。 新しく追加するディスクはもうデータディレクトリだけ置くつもりなのでマウントした場所がすぐデータディレクトリということにした。
普通に動くのだが、一つ考えていなかった問題が発生した。 /var/log/mysqld に毎日数回こんなメッセージが書き出される。
150621 15:32:14 [ERROR] Invalid (old?) table or database name 'lost+found'
マウントした直下に自動で作られる lost+found ディレクトリがテーブルだかデータベースだかに見えないという。 それはそうだ。
階層一つ深くする、というのがひとつの確実な解決策なのは判る。 が、lost+found 自体を無視できればその方が楽。
ということで調べたところ、方法があった。
mysqld
のオプションに --ignore-db-dir=〈無視したいディレクトリ〉
を付加するか、実質的に同じことだが、設定ファイル my.cnf に ignore_db_dirs=〈無視したいディレクトリ〉
を追加する。
ただし、一つ制限があって、MySQL のバージョン 5.6.3 以降でしか使えない。 当初使いたかったシステムには適用できなかった(まあディスク容量を食い過ぎるような状態になるぐらい使い続けているシステムなので若干古い)。
余談その1: RDS に移すことを考えたほうが良かったかもしれない。
余談その2: datadir 内の lost+found を無視する方法 みたいなそのものズバリなブログ(英語)も見つかったが、ignore_db_dirs に言及しているページ自体がグーグル検索でわずか数百件だったので枯れ木も山の賑わいとちょっと書いてみた。