MySQL の binlog/redolog/undolog の違いは何ですか?
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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