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ユーザーを追加する方法を習得することは、データベース管理者と開発者にとって重要です。これは、データベースのセキュリティとアクセス制御を保証するためです。 1)CreateUserコマンドを使用して新しいユーザーを作成し、2)付与コマンドを介してアクセス許可を割り当て、3)FlushPrivilegesを使用してアクセス許可を有効にすることを確認します。

choosecharforfixed-lengthdata、varcharforvariable-lengthdata、andtextforlargetextfields.1)chariseffienceforconsistent-lengthdatalikecodes.2)varcharsuitsvariaible-lengthdatalikenames、balancingflexibilityandperformance.3)Textisidealforforforforforforforforforforforidex

MySQLの文字列データ型とインデックスを処理するためのベストプラクティスには、次のものが含まれます。1)固定長のchar、可変長さのvarchar、大規模なテキストのテキストなどの適切な文字列タイプを選択します。 2)インデックス作成に慎重になり、インデックスを避け、一般的なクエリのインデックスを作成します。 3)プレフィックスインデックスとフルテキストインデックスを使用して、長い文字列検索を最適化します。 4)インデックスを定期的に監視および最適化して、インデックスを小さく効率的に保つ。これらの方法により、読み取りと書き込みのパフォーマンスをバランスさせ、データベースの効率を改善できます。

toaddauserremotelytomysql、フォローステープ:1)connecttomysqlasroot、2)createanewuserwithremoteaccess、3)grantniverayprivileges、and4)flushprivileges.

tostorestringseffiedlyinmysql、choosetherightdatatypebasedonyourneadss:1)usecharforfixed-lengthstringslikecountrycodes.2)usevarforvariable-lengthstringslikenames.3)usetextfor forlong-formtextcontent.4)useblobforborikedalikeimages

MySQLのBLOBおよびテキストデータ型を選択する場合、BLOBはバイナリデータの保存に適しており、テキストはテキストデータの保存に適しています。 1)BLOBは、写真やオーディオなどのバイナリデータに適しています。2)テキストは、記事やコメントなどのテキストデータに適しています。選択するときは、データプロパティとパフォーマンスの最適化を考慮する必要があります。

いいえ、Youは、usotherootuserinmysqlforyourproduct.instead、createpificusers withlimitedprivilegestoenhancesecurityandperformance:1)createanewuserwithastrongpassword、2)grantonlynlyneversearpermissionStothisuser、3)正規環境筋肉筋周辺の環境

mysqlstringdatatypesshouldbechosenbadedatacharacteristicsandusecases:1)usecharforfixed-lengthstringslikecountrycodes.2)usevarforvariable-lengthstringslikenames.3)usebinaryorvarniaryforbinarydatalikecryptograpograpogrationckeys.4)使用


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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