MySQLログに関する知識のまとめ

MySQLログに関する知識のまとめ

データベースにデータを保存するために使用されるファイルはデータ ファイルと呼ばれ、ログ ファイルはログ ファイルと呼ばれます。また、それぞれの読み取りと書き込みがディスクに直接アクセスすると、パフォーマンスが非常に悪くなるため、データベースにはキャッシュがあり、データ キャッシュはデータ バッファ、ログ キャッシュはログ バッファです。

SQL実行順序

update table set c=c+1 where id = 2 などの更新ステートメントを実行する場合、実行順序は次のようになります。

  • 実行者は、ストレージ エンジンを通じて id=2 の行レコードを取得します。 id=2 の行レコードが配置されているデータ ページがすでにメモリ内にある場合は、そのデータ ページが直接返されます。それ以外の場合は、データをディスクから読み取る必要があります。
  • 実行者は返された行データを取得し、フィールド c の値に 1 を加算して新しい行データを取得し、ストレージ エンジン インターフェイスを呼び出して行データを書き込みます。
  • エンジンはこのデータ行をメモリに更新し、更新操作をREDOログに記録します。この時点で、REDOログは準備状態にあります。次に、実行が完了したこととトランザクションがいつでもコミットできることをエグゼキュータに伝えます。
  • 実行者はこの操作の bin ログを生成し、その bin ログをディスクに書き込みます。
  • エグゼキュータはエンジンのコミットトランザクションインターフェースを呼び出し、エンジンは書き込まれたばかりのREDOログをコミット状態に変更し、更新が完了します。

補足: MySQL の基本的なストレージ構造はページ (レコードはページに格納されます) であるため、MySQL はまずレコードが配置されているページを見つけ、次にそのページをメモリにロードし、対応するレコードを変更します。

ビンログ

何ですか

バイナリログはアーカイブログまたはバイナリログとも呼ばれます。MySQL Serverレベルに属し、データベースのテーブル構造とテーブルデータの変更を記録するために使用されます。簡単に言えば、挿入、削除、更新など、変更された各SQLステートメント(もちろんSQLだけでなく、トランザクションID、実行時間など)を保存するものと言えます。

いつ生産されるのか

トランザクションがコミットされると、トランザクション内のすべての SQL ステートメントが特定の形式で一度に bin ログに記録されます。

何の役に立つんだ

主な機能は2つあります: マスタースレーブレプリケーションとデータリカバリ

  • 現在、ほとんどのデータベース アーキテクチャには、1 つのマスターと複数のスレーブがあります。スレーブ サーバーは、マスター サーバーの bin ログにアクセスして、データの一貫性を確保します。
  • バイナリログはデータベースへの変更を記録し、データの復元に使用できます。

ディスクはいつドロップされますか?

innodb_flush_log_at_trx_commit と sync_binlog の区別

バイナリログはsync_binlogパラメータに依存します

  • 0: トランザクションがコミットされた後、オペレーティングシステムがキャッシュをディスクにフラッシュするタイミングを決定します (パフォーマンスは最高、セキュリティは最低)
  • 1: トランザクションが送信されるたびに、fsync が呼び出され、キャッシュがディスクに書き込まれます (セキュリティは最高ですが、パフォーマンスは最低です)
  • n: n 個のトランザクションをコミットした後、fsync を 1 回呼び出してキャッシュをディスクに書き込みます。

ファイルログモード

ビンログには、行、ステートメント、混合の3つのファイル記録モードがあります。

  • 行(行ベースのレプリケーション、PBR):データの各行の変更を記録する

利点: 各データ行の変更内容を明確に記録し、マスター スレーブ データの一貫性を完全に保証できます。欠点: テーブルの変更などのバッチ操作中に大量のログが生成されます。

  • ステートメント: データを変更する各SQLステートメントを記録します。これはSQLステートメントのレプリケーションと見なすことができます。

利点: ログデータの量が少なく、ディスクIOが削減され、ストレージとリカバリ速度が向上します。欠点: SQL文に**now()**などの関数が含まれている場合など、マスターとスレーブの不整合が発生する場合があります。

  • 混合: 上記の 2 つのモードの混合。MySQL は、SQL ステートメントに基づいて書き込みモードを選択します。通常、ステートメント モードは、bin ログを保存するために使用されます。ステートメント モードで複製できない操作の場合、行モードは、bin ログを保存するために使用されます。

再実行ログ

何ですか

REDO ログは、Redo ログと呼ばれます。これは、InnoDB ストレージ エンジン レイヤーのログです。特定の行または複数の行がどのように変更されたかではなく、物理ページの変更情報を記録します。

いつ生産されるのか

トランザクションが開始されると、REDO ログが書き込まれます。 REDO ログは、トランザクションがコミットされたときにはディスクに書き込まれませんが、トランザクションの実行中にディスクに書き込まれます。

何の役に立つんだ

データの回復に使用できます。トランザクション開始後にREDOログがディスクに書き込まれ、シーケンシャルIOなので書き込み速度が速いです。サーバーの電源が突然失われた場合、InnoDB エンジンは REDO ログを使用してデータベースを電源障害前の時点に復元し、データの整合性を確保します。

ディスクはいつドロップされますか?

InnoDB は、まずログをログ バッファーに書き込み、次にログをログ バッファーから OS バッファーにフラッシュし、最後にファイル システムの fsync 関数を呼び出してログをディスクにフラッシュします。 REDOログの書き込みタイミングは、パラメータinnodb_flush_log_at_trx_commitによって決定されます。

  • 0: 1秒に1回、ログバッファをOSバッファに書き込み、fsyncを呼び出してディスクにフラッシュします。
  • 1: トランザクションが送信されるたびに、ログ バッファーが OS バッファーに書き込まれ、fsync が呼び出されてディスクにフラッシュされます。
  • 2: トランザクションがコミットされるたびに、OSバッファにのみ書き込まれ、その後fsyncが1秒ごとに呼び出されてログがディスクにフラッシュされます。

MySQL がクラッシュしてもデータが失われないため、一般的な値は 2 です。サーバー全体がクラッシュした場合にのみ、1 秒分のデータが失われます。

bin ログと redo ログ

上記の紹介を読んだ後、bin ログと redo ログは非常に似ていると感じました。どちらもデータの変更を記録し、リカバリに使用できます。実際のところ、両者の間にはまだ明らかな違いが残っています。

  • binログはMySQLサーバーレベルに属し、redoログはInnoDBストレージエンジンレベルに属します。
  • bin ログは、SQL ステートメントの元のロジックを記録する論理ログです。redo ログは、物理ページの更新の内容を記録する物理ログです。
  • Bin ログは追記方式で書き込まれます。ファイルが制限に達すると、次のファイルに置き換えられ、上書きされません。Redo ログは循環方式で書き込まれます。ファイル サイズは固定です。いっぱいになると、元の内容を上書きしながら、再び最初から書き込まれます。
  • bin ログの機能は、マスターとスレーブ間でデータを複製して回復することです。データベースが削除されたり、スレーブがマスターとデータを同期したりする場合、データを変更した SQL ステートメントが記録されるため、bin ログを使用してデータを回復できます。 REDO ログの役割は永続性です。サーバーがクラッシュしたり電源が落ちたりすると、データは失われますが、REDO ログを通じて復元できます。
  • bin ログはトランザクションがコミットされたときにのみディスクに書き込まれますが、redo ログはトランザクションが開始されたときにディスクに書き込まれます。

データベース全体が削除された場合、REDO ログを通じて復元できますか?

いいえ! REDO ログはトランザクションのデータ変更を保存することに重点を置いているため、メモリ内のデータがディスクにフラッシュされると、REDO ログ内のデータには実際には参照値がなくなります。さらに、REDO ログは履歴データを上書きするため、それを通じてすべてのデータを回復することは不可能です。

元に戻すログ

MySQLトランザクションログの詳細な分析

何ですか

UNDO ログはロールバック ログと呼ばれ、InnoDB ストレージ エンジン レイヤーに属します。データの各行を記録する論理ログです。データを変更すると、元に戻すログが生成されます。データが挿入されると、元に戻すログには対応する削除ログが記録され、その逆も同様であると考えられます。

いつ生産されるのか

トランザクションを開始する前に、現在のバージョンのUNDOログを生成します。

何の役に立つんだ

主な機能: ロールバックとマルチバージョン同時実行制御 (MVCC) を提供する

  • ロールバック: ロールバックが必要な場合、ロールバックする UNDO ログの論理レコードから対応するコンテンツが読み取られます。
  • MVCC: 元に戻すログ レコードには、データの古いバージョンが保存されます。トランザクションがデータを読み取る必要がある場合、元に戻すチェーンに従って、可視性を満たすレコードを検索します。

以上がMySQLログ関連知識のまとめの詳しい内容です。MySQLログについてさらに詳しく知りたい方は、123WORDPRESS.COMの他の関連記事もぜひご覧ください!

以下もご興味があるかもしれません:
  • MySQL のスローログ監視の誤報問題の分析と解決
  • MySQL スロークエリログの役割と公開
  • MySQL スロークエリログの有効化と設定
  • MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal
  • MySQLのREDOログ(リドゥログ)とロールバックログ(アンドゥログ)の詳しい説明
  • MySQL 中断された接続警告ログの分析
  • MySQLトランザクションとMySQLログの詳細な説明
  • ツールの構築と使用の詳細な紹介。Anemometer は MySQL のスローログをグラフィカルに表示します。
  • MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明
  • mysql bin-log ログファイルを sql ファイルに変換する方法

<<:  Nginx+tomcat ロードバランシングクラスタの実装方法

>>:  ウェブページ HTML 順序付きリスト ol と順序なしリスト ul

推薦する

MySQL で行を列に変換したり、列を行に変換したりする詳細な例

mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

タブ切り替えを実装するための HTML サンプル コード

タブ切り替えもプロジェクトではよく使われる技術です。一般的にタブ切り替えはjsやjqを使って実装され...

フロントエンド開発一般マニュアル(ツール、Webサイト、経験などを含む)

今日は何もすることがなかったので、いくつかのツール(オンラインとクライアント)、よく使用する URL...

mysqlは、現在の時刻が開始時刻と終了時刻の間にあるかどうかを判断し、開始時刻と終了時刻が空であることが許可されます。

目次要件: 進行中のアクティビティ データを照会する次のSQLクエリは、上記の4つの要件を満たし、タ...

Linuxシステムにおける重要なサブディレクトリの問題について話す

/etc/fstabパーティション/ディスクを自動的にマウントし、マウントするパーティション/デバイ...

MySQL バッチ挿入とユニークインデックスの問題に対する解決策

MySQL バッチ挿入の問題プロジェクトを開発しているときに、古いシステムの基本データを事前にインポ...

JavaScript の基本オブジェクト

目次1. オブジェクト1.1 オブジェクトとは何ですか? 1.2 なぜオブジェクトが必要なのか? 2...

React antdはフォームの動的な増減を実現します

以前、動的フォームを記述しているときに落とし穴に遭遇しました。インデックスの添え字をキーとして使用す...

MySQLのトランザクションとデータ一貫性処理の問題を分析する

この記事では、セキュリティ、使用方法、同時処理などを通じて、MySQL トランザクションとデータの一...

JavaScript のプライベート クラス フィールドと TypeScript のプライベート修飾子の詳細な説明

目次JavaScript のプライベート クラス フィールドとプライバシーの必要性JavaScrip...

VMware IOInsight を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

例: VMware IOInsight は、VM のストレージ I/O 動作を理解するのに役立つツー...

Mysql トランザクション分離レベルの読み取りコミットの詳細な説明

MySQL トランザクション分離レベルを表示する mysql> '%isolation...

tbodyタグの魔法はテーブルコンテンツの表示を高速化します

他の人のウェブページを保存して見たことがあると思いますが、特にdwで開くと、多くのウェブページに&l...