MySQL binlog/redolog/undolog の違いは何ですか?
InnoDB のロック メカニズムについて話したい場合、必然的に MySQL ログ システム、binlog、redo ログ、undo ログなどが関係することになります。悪い、急いで友達と共有してください。
ログは mysql
データベースの重要な部分であり、データベースの操作中のさまざまなステータス情報を記録します。 mysql
ログには主に、エラー ログ、クエリ ログ、スロー クエリ ログ、トランザクション ログ、バイナリ ログが含まれます。
開発者として注目する必要があるのは、バイナリ ログ (binlog
) とトランザクション ログ (redo ログ
および undo ログ## を含む) です。 #). この記事では、次にこれら 3 種類のログについて詳しく紹介します。
binlog は、データベースによって実行された書き込み操作 (クエリを除く) 情報を記録するために使用され、バイナリ形式でディスクに保存されます。
binlog は
mysql の論理ログで、
Server レイヤーによって記録されます。任意のストレージ エンジンを使用する
mysql データベースは ## を記録します# binlog
ログ。
- 論理ログ: 記録されているのは SQL 文であることがわかります
- 物理ログ:
- mysql
データは最終的にデータ ページに保存され、物理ログにデータ ページの変更が記録されます。
は追加によって書き込まれます。各 binlog
ファイルは、max_binlog_size
パラメータを通じて設定できます。サイズが指定された値に達すると、ログを保存するために新しいファイルが生成されます。 実際のアプリケーションでは、
にはマスター/スレーブ レプリケーションとデータ リカバリという 2 つの主な使用シナリオがあります。
- マスター/スレーブ レプリケーション:
- Master
側で
データ回復:binlog
を開き、binlog
を各 ## に送信します。 #スレーブ側、
スレーブ側は
binlogを再生して、マスターとスレーブのデータの一貫性を実現します。
mysqlbinlog - ツールを使用してデータを回復します。
binlog フラッシュのタイミング
InnoDB
ストレージ エンジンの場合、トランザクションがコミットされたときにのみ記録されますbiglog 、この時点ではレコードはまだメモリ内にあるため、
biglog がディスクにフラッシュされたのはいつですか?
mysql
sync_binlog パラメータを通じて
biglog のフラッシュ タイミングを制御します。値の範囲は
0 ~ N:
- 1: commit# のたびに#;
-
#binlogN:
binlog
は、N 個のトランザクションごとにディスクに書き込まれる場合、 をディスクに書き込む必要があります。 -
sync_binlog上記のことからわかるように、
の最も安全な設定は
であり、これは MySQL 5.7.7 でもあります。
以降のバージョンのデフォルト値。ただし、より大きな値を設定するとデータベースのパフォーマンスが向上するため、実際の状況では、値を適切に増やし、ある程度の一貫性を犠牲にしてパフォーマンスを向上させることもできます。 binlog ログ形式
ログには、
STATMENT、ROW
、MIXED# という 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 書き込みを使用するとパフォーマンスが低すぎます。
そこで、REDO ログの基本概念mysql
は
redo ログを設計しました。具体的には、トランザクションがデータ ページに加えた変更を記録するだけです。これにより、パフォーマンスの問題 (比較的ファイルが小さく、シーケンシャル IO) が完全に解決されます。
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サポート 3 つのタイミング
redo ログ バッファ を
redo ログ ファイル に書き込む場合は、
innodb_flush_log_at_trx_commit パラメーターを使用して構成できます。各パラメーター値の意味は次のとおりです:
REDO ログは実際にデータ ページへの変更を記録します。全ての変更記録を保存する必要はないため、
redoログは固定サイズかつ循環書き込み方式で実装されており、最後まで書き込むと先頭に戻ってログを書き込みます。ループ。以下に示すように:
redo ログ があることが簡単にわかります。
データ ページ もフラッシュする必要があります。また、フラッシュする必要がある
データ ページ もあります。
redo ログ の主な意義は、
データ ページ
上の図の
write pos は、
redo log 現在のレコード
の LSN
(論理シーケンス番号) 位置を表します。チェックポイント は、データ ページ変更レコードがフラッシュされた後の
redo log に対応する
LSN
write pos
check point
間の部分は、新しいレコードの記録に使用される
redo ログ の空の部分です。
check の間point および
write pos は、ディスクに書き込まれるデータ ページの
redo log 変更レコードです。
write pos が
check point に追いつくと、まず
check point
innodb
を起動すると、前回正常終了、異常終了に関わらず、必ず回復操作が行われます。
redo ログ はデータ ページの物理的な変更を記録するため、回復速度は論理ログ (
binlog
innodb
を再起動すると、最初にディスク内のデータ ページの
LSN がチェックされます。データ ページの
LSN がログ LSN
の よりも小さい場合、リカバリは
checkpoint
ダウンタイム前に
checkpoint のディスク ブラッシング プロセスが進行中で、データ ページのディスク ブラッシングの進行状況がログ ページのディスク ブラッシングの進行状況を超える状況もあります。このとき、データが表示されます。ページに記録されている
LSN は、ログの
LSN
binlog
と
redo log# の違いからわかります。 ##: binlog
ログはアーカイブにのみ使用され、binlog
のみに依存する場合、クラッシュ セーフ
機能はありません。
ただし、redo log
だけは機能しません。redo log
は InnoDB
に固有であり、ログ内のレコードは書き込まれた後に上書きされるためです。ディスク。したがって、データベースが停止して再起動されたときにデータが失われないようにするには、binlog
と redo log
の両方を同時に記録する必要があります。
undo log
データベース トランザクションの 4 つの主要な特性の 1 つはアトミック性です。具体的には、アトミック性とは、データベースに対する一連の操作 (すべてが成功するかすべてが失敗するかのいずれか) を指します。成功。
実際、原子性の最下層は undo log
によって実現されます。 undo ログ
は主にデータの論理的な変更を記録します。たとえば、INSERT
ステートメントは、それぞれの DELETE
の undo ログ
に対応します。 UPDATE
ステートメントは、反対側の UPDATE
の undo ログ
に対応するため、エラーが発生したときにトランザクション前のデータ状態にロールバックできます。
同時に、アンドゥ ログ
は、MVCC
(マルチバージョン同時実行制御) 実装の鍵でもあります。
以上がMySQL の binlog/redolog/undolog の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

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

ホットトピック



