検索
ホームページデータベースmysql チュートリアルMySQL の binlog/redolog/undolog の違いは何ですか?

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 までご連絡ください。
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 中国語版

SublimeText3 中国語版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。