web-dev-qa-db-ja.com

MySQLは異なる物理ストレージデバイスで複数のデータディレクトリを使用できますか

128GbSSDでデータディレクトリを使用してMySQLを実行しています。私は毎週ロードされて処理される大きなデータセット(〜20Gb)を扱っており、それぞれが時点の比較のために別々のDBに保存されています。このような大規模なデータベースでのパフォーマンスはすでに問題となっているため、すべてのデータを単一のデータベースに入れることは不可能です。ただし、SSDに一度に6つを超えるデータセットを保持することはできません。現在、私は毎週、最も古いものからはるかに大きな2Tbスピニングディスクを手動でダンプし、データベースを削除して新しいディスク用のスペースを確保しています。しかし、「アーカイブされた」データベースの1つが必要な場合(半定期的に発生)、現在のデータベースを(ダンプ後に)ドロップし、リロードし、必要なことを実行してから、結果を逆にする必要があります。

SSDと2Tbスピニングディスクに1つずつ、複数のデータディレクトリを使用するようにMySQLを構成し、それらを透過的に「マージ」する方法はありますか?これができれば、アーカイブは「データベースから完全に移動した」という意味ではなく、「低速の物理デバイスに移動した」という意味になります。回転しているディスクでクエリを実行するのにかかる時間は、2つのデータベース全体を完全にダンプ、ドロップ、ロード、ドロップ、リロードするのにかかる時間よりも短いため、これはメリットです。

Unionfsのようなものを使用することを考えましたが、(私が理解していることから)ディレクトリレベルでマージすることで機能するため、どのデータベースをどの物理ドライブに格納するかを制御する方法を考えることができません。複数のディレクトリ。

よろしくお願いします、事前に感謝します

3
sirlark

まず、すべてのデータベースdb_nameについて、そのdatadir内にfolderを格納することを検討する必要があると思います(例:/var/lib/mysql)。したがって、理論的には、異なるディスク上のフォルダへのシンボリックリンクを持つことができます。ただし、これには別の問題があります。InnoDBストレージエンジンを使用する場合、データをフォルダー内に保存しますnot。代わりに、単一のログファイルibdata*を使用します。

これは重要だと思います。ご指摘のとおり、unionfsは、2つのファイルシステムの単純な結合だけが必要な場合に最適ですが、データを書き込む際のバッキングストアの基本的なセマンティクスを理解(または評価)しません。 。

頭のてっぺんから、あなたが望むことを正確に実行するファイルシステムがあるとは言えません。また、それはニッチすぎるかもしれないと思います。

ただし、目的の場所にたどり着くために調べることができることがいくつかあると思います。

  • 独自の個別のデータディレクトリを使用して、MySQLの2つのコピーを実行します。次に、FEDERATEDテーブルタイプを使用して、単一のMySQLインスタンス内にすべてのデータがあることの影響を「シミュレート」できます。
  • 少し単純です:MyISAMテーブルタイプを使用したシンボリックリンク(これには、テーブルの削除に関していくつかの広範なテストが必要になります。おそらく、リンクが失われるのを防ぐためにそれらを切り捨てることしかできませんでした)
2
Jay