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

推薦する

html+css3で実装されたログインインターフェース

成果を達成するまずHTMLを使って基本的なフレームワークを構築します <本文> <...

MySQLデータベースの一般的な最適化操作のまとめ(経験共有)

序文データ中心のアプリケーションの場合、データベースの品質はプログラムのパフォーマンスに直接影響する...

Vue+Openlayerはグラフィックスのドラッグと回転変形効果を実現します

目次序文関連資料成果を達成する実装手順序文Openlayer には独自の拡張プラグイン ol-ext...

Linux システムで tcpdump を使用してパケットをキャプチャする方法

まずサンプルコードを見てみましょう: 1. 共通パラメータ tcpdump -i eth0 -nn ...

CSS3マスクレイヤーのくり抜き効果を実現するさまざまな方法

この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...

純粋な CSS3 で蝶が羽ばたく様子を再現する例

純粋なCSS3で蝶が羽ばたく様子を再現。まずはその効果をご覧ください どうですか?効果はかなりいいで...

ethers.js を使用して Solidity スマート コントラクトをデプロイする方法

Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript...

Docker で Docker0 ブリッジのデフォルトのネットワーク セグメントを変更する方法

1. 背景Docker サービスが開始されると、デフォルトで docker0 ブリッジが作成され (...

Docker でコンテナのポート マッピングを動的に変更する方法

前書き: Docker のポート マッピングは、多くの場合、Docker Run コマンド中に -p...

テキストエリアのテキストをHTMLに変換する方法、つまり復帰改行について

説明: テキストエリアの値の改行を新しい行に変更しますコードをコピーコードは次のとおりです。 <...

2008 年の Web デザインにおける 10 の経験

<br />インターネットは絶えず変化しており、BusinessWeek.com は専門...

Windows の MySQL net start mysql MySQL サービスの起動エラーが発生する システムエラーの解決

目次1- エラーの詳細2-シングルソリューション2.1-ディレクトリ C:\Windows\Syst...

Explainキーワードに基づいてMySQLインデックス機能を最適化する方法

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

CSS3は赤い封筒を振る効果を実現します

赤い封筒の揺れ効果を実現するには要件があります。これまでやったことがないので、記録しておきます。ヘヘ...

Vue3+Vantコンポーネントを使用してアプリの検索履歴機能を実装する(サンプルコード)

現在、新しいアプリプロジェクトを開発中です。私にとっても初めてのアプリ開発です。チームで調査と検討を...