では、まず次の質問について考えてみましょう。MySQL はどのようにしてデータが失われないようにするのでしょうか? 実際、データが失われないようにするには、次の 2 つの機能が必要です。 これは、今日お話しするトピックに関係しているのではないでしょうか。最初のポイントを達成するには、bin ログを使用する必要があり、2 番目のポイントを達成するには、redo ログと undo ログを使用する必要があります。 3 つの主要なログを理解する前に、Mysql データ更新のプロセスを見てみましょう。 上の図は、REDO ログ、BIN ログ、UNDO ログの 3 種類のログ間の一般的な関係を示しています。それでは、本題に入りましょう。 1. redo ログ (MySQL ストレージ エンジン InnoDB のトランザクション ログ)MySQL データはディスクに保存され、データの読み取りまたは書き込みのたびにディスク IO が必要になるため、同時実行シナリオではパフォーマンスが低下することがわかっています。この目的のために、MySQL では最適化のためのキャッシュバッファ プールが導入されています。データベースのディスク負荷を軽減するために、ディスク上のいくつかのデータ ページのマッピングが含まれています。 データベースからデータを読み取るときは、まずキャッシュから読み取られます。データがキャッシュにない場合は、ディスクから読み取られてキャッシュに格納されます。データベースにデータを書き込むときは、まずキャッシュに書き込まれます。このとき、キャッシュ内のデータ ページのデータが変更されます。このデータ ページはダーティ ページと呼ばれます。バッファー プール内のデータが変更されると、設定された戦略に従って定期的にディスクにフラッシュされます。このプロセスは、ダーティ ページのフラッシュと呼ばれます。 質問は、バッファ プール内の変更されたデータが時間内にディスクにフラッシュされない場合、MySQL がクラッシュして再起動し、データが失われ、トランザクションの永続性が保証されなくなるということです。どうすればよいでしょうか? REDO ログはこの問題を解決します。つまり、データベースがデータを変更すると、まず更新レコードが REDO ログに書き込まれ、次にバッファー プール内のデータが変更されます。トランザクションがコミットされると、fsync が呼び出され、REDO ログがディスクにフラッシュされます。キャッシュ内の更新されたデータ ファイルがディスクにフラッシュされるタイミングについては、バックグラウンド スレッドによって非同期的に処理されます。 注意: この時点では、REDO ログ トランザクション ステータスは準備中であり、実際には正常にコミットされていません。バイナリ ログがディスクに書き込まれるまで、コミットに変わりません。その後でのみ、トランザクションは実際に正常にコミットされます。 REDOログを書き込むにはどうすればいいですか? REDO ログは固定サイズで循環的に書き込まれます。いっぱいになると、リングと同様に最初から循環的に再度書き込まれます。この設計の理由は、REDO ログがデータ ページの変更を記録するためです。バッファー プールのデータ ページがディスクにフラッシュされると、これらのレコードは無効になり、新しいログによってこれらの無効なレコードが上書きされ、消去されます。 注意: REDO ログがいっぱいの場合は、消去する前に、消去するすべてのレコードがディスクにフラッシュされていることを確認してください。新しいスペースを解放するために古いレコードを消去している間は、新しい更新要求を受信できず、MySQL のパフォーマンスが低下します。したがって、同時実行性が高い状況では、REDO ログ サイズを適切に調整することが重要です。 クラッシュセーフ機能とは何ですか? Innodb エンジンにはクラッシュセーフ機能があり、トランザクション送信プロセスのどの段階でも、MySQL がクラッシュして再起動した後でもトランザクションの整合性が保証され、送信されたデータが失われることはありません。この機能は、REDO ログによって保証されます。MySQL がクラッシュして再起動すると、システムは自動的に REDO ログをチェックし、まだディスクに書き込まれていない変更されたデータを REDO ログから MySQL に復元します。 2. UNDOログロールバックログ(MySQLストレージエンジンInnoDBのトランザクションログ) UNDO ログは、データが変更される前の状態を記録します。論理ログに属し、ロールバックの役割を果たします。トランザクションのアトミック性を保証する鍵となります。 そこで疑問になるのが、同じトランザクションのレコードが複数回変更された場合、そのたびにデータ変更前の状態の UNDO ログを書き込む必要があるかどうかです。 いいえ。UNDO ログには、トランザクションが開始される前の元のデータのみが記録されるためです。このデータ行が再度変更されると、生成された変更レコードが REDO ログに書き込まれます。 UNDO ログはロールバックを担当し、REDO ログはロールフォワードを担当します。 ロールバックとロールフォワードとは何ですか? (1)ロールバック コミットされていないトランザクション、つまり、コミットされていないトランザクション。ただし、トランザクション内で変更されたダーティ ページの一部はディスクにフラッシュされています。このとき、データベースがクラッシュして再起動し、ディスクからフラッシュされたダーティ ブロックを削除するにはロールバックが必要になります。 (2)前転 不完全にコミットされたトランザクションとは、トランザクションはコミットされたものの、トランザクションで変更されたダーティ ページのデータの一部のみがディスクにフラッシュされ、残りの部分はバッファー プールに残っていることを意味します。このとき、データベースがクラッシュして再起動すると、ロールフォワードを使用して、ディスクにフラッシュされていないデータを REDO ログから回復し、ディスクにフラッシュします。 3. バイナリログアーカイブログ(エンジンに関係なく、データベースサーバー層のバイナリ論理ログ) bin ログには、データベース上でユーザーが実行したすべての SQL 操作が記録されます (クエリ ステートメントは除きます。このような操作ではデータ自体が変更されないためです)。アーカイブログと呼ばれる理由は、REDOログのように過去の記録を周期的に消去するのではなく、ログを記録し続けるからです。 bin ログ ファイルのデフォルトの最大容量は 1G です (max_binlog_size パラメータで変更できます)。 1 つのログが最大値を超えると、書き込みを続行するために新しいファイルが作成されます。 上記の紹介の後、binlog は主にマスターとスレーブの同期と、時点に基づくデータベースの復元に使用されます。 そこで疑問になるのが、binlog なしでも実行できるかどうかです (REDO ログがあるのに、なぜ bin log が必要なのでしょうか)。 シーンを見る必要があります: マスタースレーブモードでは、スレーブデータベースのデータ同期は binlog に依存するため、binlog が必要です。 スタンドアロン モードでは、データベースのポイントインタイム復元を考慮しない場合、REDO ログによってクラッシュセーフ機能が保証されるため、binlog は必要ありません。 REDO ログ レコードが変更されてディスクに書き込まれると、ログは上書きされ、データ回復などの操作に使用できなくなります。REDO ログは InnoDB エンジン レイヤーで実装されており、すべてのエンジンに実装されているわけではありません。 REDO ログと bin ログの違いは何ですか? REDO ログ 2 フェーズ コミットとは何ですか? また、なぜそれを実行するのですか? 2 フェーズコミットでなかったらどうなるでしょうか? REDO ログ災害復旧プロセスについて説明してください。 MySQLデータベース面接に必須の3つのログについての記事はこれで終わりです。MySQLの主要3ログについての詳細は、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: VMware 仮想マシン (CentOS7 イメージ) を使用して Linux をインストールする
>>: Vueプロジェクトが完了した後にプロジェクトを最適化する方法の例
HTMLページジャンプ: window.open(url, "", "...
まずコードを見てみましょう #/bin/sh datename=$(日付 +%Y%m%d-%H%M%...
序文最近、弊社では mbp の設定をしており、ssh を使うことが多くなりました。複雑なコマンドを書...
スタックフローからの回答:単に<br>だけで十分です。その他の形式は、XHTML との互...
1. Workstationで仮想マシンのハードウェアバージョンを変更するWorkstation ...
目次1. はじめに2. vue-cli の紹介2.1 コマンドライン2.2 CLI サービス2.3 ...
1. 環境を準備する(Node.jsをダウンロードし、環境変数を設定する) 2. vue-cliをグ...
従来のソフトウェアから Web ウェアへの段階的な移行の傾向の中で、デザイン パターンとテクノロジは...
シナリオシミュレーション:国内企業の中には、重要な業務をサポートするために特定のウィンドウ プログラ...
1. MySQLリポジトリソースをダウンロードする$ wget http://repo.mysql....
目次リアクトフック序文なぜフックなのか?クラス関数クラスとフックの比較フックはコンポーネントの状態を...
この記事の例では、テーブルを動的に生成するjsの具体的なコードを参考までに共有しています。具体的な内...
VMware のインストールパッケージのインストールダウンロードアドレス: https://www....
目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...
目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...