2つの別々のマシンで2つの別々のMySQLインスタンスを実行したいのですが、nfsで同じデータディレクトリを使用していますが、InnoDBストレージエンジンで可能ですか?アプリケーションの操作により、次のことが保証されます。
MySQLサイトでは、これはMyISAMおよびマージストレージエンジンでのみ可能であると述べられていますが、推奨することはありません。
http://dev.mysql.com/doc/refman/5.6/en/multiple-data-directories.html
あなたが求めていることは現時点では不可能です。なぜ ???
まず、InnoDBアーキテクチャを見てください。
InnoDBバッファープールとInnoDBログバッファーは、単一のシステムテーブルスペース(別名ibdata1)で動作するように設計されています。私はこれについてOct 03, 2013
に書き戻しました: 同じサーバー上の異なるデータベースに異なるInnoDB設定を使用する方法はありますか?
探しているものが現在Oracle RACに存在します。
これらの特性を持つクラスターを形成します
MySQL用InnoDBストレージエンジン
ibdata1
に接続しようとすると、別のmysqld
プロセスから別のログバッファースレッドがすでに開いている場合、InnoDBストレージエンジンは起動に失敗する必要があります。私の 2つの代替案の以前の投稿 を読んでください。 3番目の方法は、MySQL Clusterに切り替えることです( NDB Storage Engine を使用)。これにより、複数のSQLノード間で1つ以上のデータノードを共有できます。
@ypercubeが次のコメントをしました
リンクされた質問(および回答)は約1台のサーバーです。この質問は、同じデータディレクトリを共有する2つのサーバーについてです。 2つは関連がないようです。
理論的には、単一のサーバーにmysqldの複数のインスタンスを設定できます。ただし、各mysqld
インスタンスは一意のシステムテーブルスペース(ibdata1
)を指す必要があります。この事実に照らして、複数のmysqld
インスタンスについては、それらが1つのDBサーバーからのものであっても、複数のDBサーバーからのものであっても、次のようになります。
2013年10月3日 の投稿を参照したのはこのためです。また、Oracle RACとの比較についても触れました。
2つの別個のマシンで2つの別個のMySQLインスタンスを実行したいのですが、NFSで同じデータディレクトリを使用していますが、InnoDBストレージエンジンで可能ですか?
InnoDBは、共有ログバッファーまたは共有挿入バッファーを持つようには設計されていません。答えはいいえだ。 Oracleがこれを行うためにInnoDBストレージエンジンを変更することはないと思います。そうした場合、予算上の理由や無茶苦茶な理由から、多くの人々がInnoDBを支持してOracle RACとMySQL Clusterを削除します。
技術的に可能かどうかを確認したいだけですが、おすすめは別話です。特に私のアプリケーションは書き込み/読み取りが競合しないことを保証しました
@RolandoMySQLDBAが言ったように、これはInnoDBまたはMyISAMでは不可能です。
より簡単に述べると、変更したデータの一部のページはすぐにディスクに書き込まれません。これはバックグラウンドで行われ、一度にすべてではありません。したがって、2番目の読み取り専用インスタンスが同じデータディレクトリからNFSを介してデータを読み取ろうとすると、ディスクに部分的に書き込まれた変更を読み取ることは確実です。基本的にはゴミ。
MyISAMにはバッファプールはありませんが、ファイルシステムをライトバックキャッシュとして利用するため、すべての変更がディスクに到達したかどうかはわかりません。この場合、NFSを介して別のホストからファイルを読み取ろうとすると、予測できないデータの大量のデータが表示されます。
しかし、なぜこれを最初にしたいのですか? 1秒間に多数のクエリを実行することで、より大きな容量を獲得することですか?canreplication を使用して、ほぼ同期されたデータでMySQLの複数のインスタンスを実行します。これはより一般的な方法であり、うまく機能します。
フェイルオーバー機能を使用する理由はありますか?その場合、 DRBDをブロックレベルのレプリケーション に使用できます。それ以外にも、かなりの数のフェイルオーバーソリューションがあります。