目次
MySQL binlog/redolog/undolog の違いは何ですか?
InnoDB
ログには、
では、
はどのようにして一貫性を確保するのでしょうか?
undo log
ホームページ データベース mysql チュートリアル MySQL の binlog/redolog/undolog の違いは何ですか?

MySQL の binlog/redolog/undolog の違いは何ですか?

May 27, 2023 am 08:29 AM
mysql binlog redolog

MySQL binlog/redolog/undolog の違いは何ですか?

InnoDB のロック メカニズムについて話したい場合、必然的に MySQL ログ システム、binlog、redo ログ、undo ログなどが関係することになります。悪い、急いで友達と共有してください。

ログは mysql データベースの重要な部分であり、データベースの操作中のさまざまなステータス情報を記録します。 mysql ログには主に、エラー ログ、クエリ ログ、スロー クエリ ログ、トランザクション ログ、バイナリ ログが含まれます。

開発者として注目する必要があるのは、バイナリ ログ (binlog) とトランザクション ログ (redo ログ および undo ログ## を含む) です。 #). この記事では、次にこれら 3 種類のログについて詳しく紹介します。

bin log

binlog は、データベースによって実行された書き込み操作 (クエリを除く) 情報を記録するために使用され、バイナリ形式でディスクに保存されます。 binlogmysql の論理ログで、Server レイヤーによって記録されます。任意のストレージ エンジンを使用する mysql データベースは ## を記録します# binlogログ。

    論理ログ: 記録されているのは SQL 文であることがわかります
  • 物理ログ:
  • mysql

    データは最終的にデータ ページに保存され、物理ログにデータ ページの変更が記録されます。

binlog

は追加によって書き込まれます。各 binlog ファイルは、max_binlog_size パラメータを通じて設定できます。サイズが指定された値に達すると、ログを保存するために新しいファイルが生成されます。 実際のアプリケーションでは、

binlog

にはマスター/スレーブ レプリケーションとデータ リカバリという 2 つの主な使用シナリオがあります。

    マスター/スレーブ レプリケーション:
  • Master

    側で binlog を開き、binlog を各 ## に送信します。 #スレーブ 側、スレーブ 側は binlog を再生して、マスターとスレーブのデータの一貫性を実現します。

    データ回復:
  • mysqlbinlog
  • ツールを使用してデータを回復します。

    binlog フラッシュのタイミング

InnoDB

ストレージ エンジンの場合、トランザクションがコミットされたときにのみ記録されます

biglog 、この時点ではレコードはまだメモリ内にあるため、biglog がディスクにフラッシュされたのはいつですか? mysql

sync_binlog パラメータを通じて biglog のフラッシュ タイミングを制御します。値の範囲は 0 ~ N:

0: 必須の要件はありません。ディスクに書き込むタイミングはシステムが決定します;
  • 1:
  • commit# のたびに#;
  • N: binlog は、N 個のトランザクションごとにディスクに書き込まれる場合、

    #binlog
  • をディスクに書き込む必要があります。
  • 上記のことからわかるように、

    sync_binlog
  • の最も安全な設定は
1

であり、これは MySQL 5.7.7 でもあります。 以降のバージョンのデフォルト値。ただし、より大きな値を設定するとデータベースのパフォーマンスが向上するため、実際の状況では、値を適切に増やし、ある程度の一貫性を犠牲にしてパフォーマンスを向上させることもできます。 binlog ログ形式

binlog

ログには、

STATMENT

ROWMIXED# という 3 つの形式があります。 ##。 MySQL 5.7.7 より前のデフォルト形式は STATEMENT

MySQL 5.7.7 以降のデフォルト値は ROW 。ログ形式は binlog-format で指定します。 STATMENT

:
    SQL
  • ステートメントに基づくレプリケーション (

    ステートメントベースのレプリケーション、SBR)、各ステートメントは次のようになります。変更 データの SQL ステートメントは binlog に記録されます。 ROW

    : 行ベースのレプリケーション (
  • 行ベースのレプリケーション、RBR
  • ) は、各 SQL ステートメントのコンテキスト情報を記録しません。どのデータが変更されたかを記録する必要があるだけです。

    MIXED

    :
  • STATMENT
  • および

    ROW 、MBR) に基づく混合ベースのレプリケーション、一般的なコピーSTATEMENT モードを使用して binlog を保存します。STATEMENT モードでコピーできない操作の場合は、ROW モードを使用します。 binlog# を保存します。 ##redo ログredo ログが必要な理由

  • トランザクションの 4 つの主要な特徴は誰もが知っています。そのうちの 1 つは次のとおりです。具体的には、トランザクションが正常に送信される限り、データベースに加えられた変更は永続的に保存され、いかなる理由であっても元の状態に戻すことはできません。

では、

mysql

はどのようにして一貫性を確保するのでしょうか?

簡単な方法は、トランザクションがコミットされるたびに、ディスクへの変更に関係するすべてのデータ ページをフラッシュすることです。ただし、これを行うと、主に次の 2 つの側面に反映される重大なパフォーマンス上の問題が発生します。
  • Innodb ページ 単位でディスク操作を実行し、トランザクションで変更できるのは数ページのデータのみであるためです。現時点で完全なデータ ページをディスクにフラッシュするのはリソースの無駄です。

  • #トランザクションには複数のデータ ページの変更が含まれる場合があり、これらのデータ ページは物理的に連続していません。ランダム IO 書き込みを使用するとパフォーマンスが低すぎます。

そこで、

mysqlredo ログ を設計しました。具体的には、トランザクションがデータ ページに加えた変更を記録するだけです。これにより、パフォーマンスの問題 (比較的ファイルが小さく、シーケンシャル IO) が完全に解決されます。

REDO ログの基本概念

REDO ログ には 2 つの部分が含まれます。1 つはメモリ内のログ バッファ (REDO ログ バッファ) , もう 1 つはディスク上のログ ファイル (redo logfile) です。

mysqlDML ステートメントが実行されるたびに、レコードは最初に redo ログ バッファに書き込まれ、その後、操作レコードは redo ログ ファイル に書き込まれます。最初にログを書き込んでからディスクに書き込むこのテクノロジーは、MySQL でよく言及されている
WAL (Write-Ahead Logging) テクノロジーです。

コンピュータ オペレーティング システムでは、ユーザー スペース (

ユーザー スペース ) のバッファ データは通常、ディスクに直接書き込むことができず、オペレーティング システムのカーネル スペース (kernel space) を経由する必要があります。 ) バッファ (OS バッファ)。

したがって、

redo logbufferwriting redo logfile は、実際には最初に OS Buffer に書き込み、次にシステム fsync() を通じて を呼び出します。 それを redo ログ ファイル にフラッシュします。プロセスは次のとおりです。

MySQL の binlog/redolog/undolog の違いは何ですか?

mysqlサポート 3 つのタイミングredo ログ バッファredo ログ ファイル に書き込む場合は、innodb_flush_log_at_trx_commit パラメーターを使用して構成できます。各パラメーター値の意味は次のとおりです:

MySQL の binlog/redolog/undolog の違いは何ですか?

MySQL の binlog/redolog/undolog の違いは何ですか?

REDO ログ記録形式

前述したように、

REDO ログは実際にデータ ページへの変更を記録します。全ての変更記録を保存する必要はないため、redoログは固定サイズかつ循環書き込み方式で実装されており、最後まで書き込むと先頭に戻ってログを書き込みます。ループ。以下に示すように:

MySQL の binlog/redolog/undolog の違いは何ですか?

同時に、innodb には、必要な

redo ログ があることが簡単にわかります。 データ ページ もフラッシュする必要があります。また、フラッシュする必要がある データ ページ もあります。redo ログ の主な意義は、データ ページ

の要件を軽減することです。洗い流されます**。

上の図の write pos は、redo log 現在のレコード LSN (論理シーケンス番号) 位置を表します。チェックポイント は、データ ページ変更レコードがフラッシュされた後の redo log に対応する LSN

(論理シーケンス番号) の位置を示します。

write poscheck point 間の部分は、新しいレコードの記録に使用される redo ログ の空の部分です。check の間point および write pos は、ディスクに書き込まれるデータ ページの redo log 変更レコードです。 write poscheck point に追いつくと、まず check point

を前方に押し出し、その位置を空けてから、新しいログを記録します。

innodb を起動すると、前回正常終了、異常終了に関わらず、必ず回復操作が行われます。 redo ログ はデータ ページの物理的な変更を記録するため、回復速度は論理ログ (binlog

など) よりもはるかに高速です。

innodb を再起動すると、最初にディスク内のデータ ページの LSN がチェックされます。データ ページの LSN がログ LSN よりも小さい場合、リカバリは checkpoint

から開始されます。

ダウンタイム前に checkpoint のディスク ブラッシング プロセスが進行中で、データ ページのディスク ブラッシングの進行状況がログ ページのディスク ブラッシングの進行状況を超える状況もあります。このとき、データが表示されます。ページに記録されている LSN は、ログの LSN

よりも大きいです。このとき、ログの進行状況を超えた部分は表示されません。なぜなら、これ自体は、行われたことをやり直す必要がないことを意味するからです。

REDO ログと binlog の違い

MySQL の binlog/redolog/undolog の違いは何ですか?

binlogredo log# の違いからわかります。 ##: binlog ログはアーカイブにのみ使用され、binlog のみに依存する場合、クラッシュ セーフ機能はありません。

ただし、redo log だけは機能しません。redo logInnoDB に固有であり、ログ内のレコードは書き込まれた後に上書きされるためです。ディスク。したがって、データベースが停止して再起動されたときにデータが失われないようにするには、binlogredo log の両方を同時に記録する必要があります。

undo log

データベース トランザクションの 4 つの主要な特性の 1 つはアトミック性です。具体的には、アトミック性とは、データベースに対する一連の操作 (すべてが成功するかすべてが失敗するかのいずれか) を指します。成功。

実際、原子性の最下層は undo log によって実現されます。 undo ログは主にデータの論理的な変更を記録します。たとえば、INSERT ステートメントは、それぞれの DELETEundo ログに対応します。 UPDATE ステートメントは、反対側の UPDATEundo ログ に対応するため、エラーが発生したときにトランザクション前のデータ状態にロールバックできます。

同時に、アンドゥ ログは、MVCC (マルチバージョン同時実行制御) 実装の鍵でもあります。

以上がMySQL の binlog/redolog/undolog の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

NavicatでMySQLへの新しい接続を作成する方法 NavicatでMySQLへの新しい接続を作成する方法 Apr 09, 2025 am 07:21 AM

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

See all articles