MySQL Innodb Redo LogおよびBinLog 2フェーズコミットの実装

RedoLogとBinlogの違い

1. RedoログはInnoDBエンジンに固有であり、binlogはMySQLのサーバーレイヤーによって実装されており、すべてのエンジン
を使用できます。
2. REDOログは論理物理ログであり、ログ論理ページの操作レコードです。ページ操作は物理ログ、binlog論理日
ブログ、すべてのエンジンのMysql サーバーレイヤーに対応するログの間で記録され、パラメータ制御を介して書き込みます。
3. REDOログは周期的に書き込まれ、スペースは常に使い果たされます; binlogは追加で書き込むことができます。「追加書き込み」
とは、特定のサイズに書き込まれた後binlogファイルが次のファイルに切り替わり、以前のログを上書きしないことを意味します。
 

備考:

データベースのログタイプは、次の3つのタイプに大別できます。
論理ログ:SQLステートメントの元のロジックを記録します。オブジェクト指向はテーブル、列、その他の
物理ログなどの論理構造です:ファイルレコードに変更を記録します。オブジェクト指向はテーブルスペースです。 、データファイル、データページ、オフセットなど。
論理物理ログ:ページ内の操作は論理ログに記録され、ページ間の操作は物理ログに記録され、ページから物理、ページ内の論理

 

更新ステートメントの実行プロセスは、
データページからメモリへの変更->データの変更->データページの更新-> REDOログの書き込み(ステータスは準備中)-> binlogの書き込み->トランザクションのコミット(やり直しステータスはコミット);


2フェーズコミットを使用する利点は、ダウンタイム、ブレークポイント、再起動などの予期しない状況がデータベースで発生した場合に、BinLogを使用してリカバリされたデータがその時点のデータ状態と一致することを保証できることです。

特定の状況での戦略は次のとおりです
。binlogにはレコードがあり、redologステータスコミット:正常に完了したトランザクション、
binlogレコードを復元する必要はありません。redologステータスの準備:コミットトランザクションがbinlogで完了する前にクラッシュし、リカバリ操作:commitトランザクション
binlogにレコードがありません。 Redolog状態の準備:binlogが書き込まれる前にクラッシュ、リカバリー操作:ロールバックトランザクション
binlogにレコードがない、redologにレコードがない:redologが書き込まれる前にクラッシュ、リカバリー操作:ロールバックトランザクション
 


概要:

REDOログは、クラッシュセーフ機能を保証するために使用されます。innodb_flush_log_at_trx_commitが1に設定されている場合、これは、各トランザクションのREDOログが直接ディスクに保持されることを意味します。MySQLが異常に再起動した後にデータが失われないようにするには、このパラメーターを1に設定することをお勧めします。

sync_binlogパラメータが1に設定されている場合、各トランザクションのバイナリログがディスクに保持されることを意味します。また、MySQLが異常に再起動した後にbinlogが失われないようにするために、このパラメーターを1に設定することをお勧めします。

おすすめ

転載: blog.csdn.net/qq_36807862/article/details/100097389