現在は、サーバーの起動時に --innodb-read-only
構成オプションを有効にすることで、MySQL データディレクトリが読み取り専用メディア上にある InnoDB
テーブルでクエリーを実行できます。
有効にする方法
読み取り操作用にインスタンスを準備するには、必要なすべての情報が読み取り専用メディア上に格納される前に、データファイルにフラッシュされることを確認します。変更バッファーが無効になっている (innodb_change_buffering=0
) サーバーを実行し、低速シャットダウンを実行します。
MySQL インスタンス全体にわたって読み取り専用モードを有効にするには、サーバーの起動時に次の構成オプションを指定します。
--innodb-read-only=1
インスタンスが DVD や CD などの読み取り専用メディア上にある場合、または
/var
ディレクトリがすべてのユーザーから書き込み可能でない場合:--pid-file=
およびpath_on_writeable_media
--event-scheduler=disabled
使用シナリオ
この操作モードは、次のような状況に適しています。
DVD や CD などの読み取り専用ストレージメディア上に、MySQL アプリケーションまたは MySQL データセットを配布する。
(一般に、データウェアハウス構成で) 同じデータディレクトリで同時にクエリーを実行する複数の MySQL インスタンス。この方法を使用すれば、負荷の高い MySQL インスタンスで発生する可能性のあるボトルネックを回避したり、さまざまなインスタンスに対してさまざまな構成オプションを使用して、特定の種類のクエリーを個別に調整したりできる場合があります。
安全性またはデータの完全性の理由により読み取り専用の状態になったデータ (アーカイブされたバックアップデータなど) のクエリーを実行する。
この機能の目的は、読み取り専用の側面に基づいた生のパフォーマンスではなく、主に配布および配備する際の柔軟性です。サーバー全体を読み取り専用にする必要なしで、読み取り専用クエリーのパフォーマンスを調整する方法については、セクション14.13.14「InnoDB の読み取り専用トランザクションの最適化」を参照してください。
動作
--innodb-read-only
オプションを使用して、サーバーが読み取り専用モードで実行されると、特定の InnoDB
機能およびコンポーネントが減少したり、完全に無効になったりします。
変更バッファー (特に、変更バッファーからのマージ) は実行されません。読み取り専用操作用にインスタンスを準備するときに、変更バッファーが空になっていることを確認するには、変更バッファーを無効にして (
innodb_change_buffering=0
)、まず低速シャットダウンを実行します。起動時にはクラッシュリカバリフェーズがありません。インスタンスを読み取り専用状態にする前に、低速シャットダウンが実行されている必要があります。
読み取り専用操作では Redo ログが使用されないため、インスタンスを読み取り専用にする前に、
innodb_log_file_size
を最小限のサイズ (1M バイト) に設定できます。I/O 読み取りスレッド以外のバックグラウンドスレッドがすべて無効になります。その結果、読み取り専用インスタンスでデッドロックが発生する可能性がなくなります。
デッドロックに関する情報やモニターの出力などは、一時ファイルに書き込まれません。その結果、
SHOW ENGINE INNODB STATUS
で出力が生成されなくなります。--innodb-read-only
を使用して MySQL サーバーが起動されているが、まだデータディレクトリが書き込み可能メディア上にある場合は、root ユーザーが引き続き、GRANT
やREVOKE
などの DCL 操作を実行できます。構成オプションの設定を変更すると、通常は書き込み操作の動作が変更されますが、サーバーが読み取り専用モードになっている場合は影響がありません。
分離レベルを強制的に適用する MVCC 処理が無効になります。更新も削除もできないため、すべてのクエリーで最新バージョンのレコードが読み取られます。
Undo ログは使用されません。
innodb_undo_tablespaces
およびinnodb_undo_directory
構成オプションの設定を無効にします。