MySQL の 3 つの Binlog 形式の概要と分析

MySQL の 3 つの Binlog 形式の概要と分析

1つ。 Mysql Binlog フォーマットの紹介   

Mysql binlog ログには、Statement、MiXED、ROW の 3 つの形式があります。

1. ステートメント: データを変更するすべての SQL ステートメントが binlog に記録されます。

利点: 各行の変更を記録する必要がないため、binlog ログの量が削減され、IO が節約され、パフォーマンスが向上します。 (ROW 形式と比較して、パフォーマンスとログ ボリュームをどれだけ節約できるかは、アプリケーションの SQL 状況によって異なります。通常、ROW 形式で同じレコードを変更または挿入することによって生成されるログの量は、ステートメントによって生成されるログの量よりも少なくなります。ただし、条件付き更新操作、テーブル全体の削除、ALTER TABLE などの操作がある場合、ROW 形式は大量のログを生成します。したがって、ROW 形式のログを使用するかどうかを検討するときは、アプリケーションの実際の状況、生成されるログの量がどれだけ増加するか、およびそれがもたらす IO パフォーマンスの問題を考慮する必要があります。)

デメリット: 実行されたステートメントのみが記録されるため、これらのステートメントをスレーブ上で正しく実行するには、実行中の各ステートメントの関連情報も記録して、すべてのステートメントがマスター上で実行されたときと同じ結果をスレーブ上で得られるようにする必要があります。さらに、MySQL レプリケーションでは、特定の関数などにより、スレーブがマスターと一致することがあり、これにより多くの関連する問題が発生します (sleep() 関数、last_insert_id()、ユーザー定義関数 (udf) など)。

次の関数を使用するステートメントもコピーできません。

* LOAD_FILE()

* UUID()

* ユーザー()

* 見つかった行()

* SYSDATE() (起動時に --sysdate-is-now オプションが有効になっていない限り)

同時に、INSERT ...SELECTはRBRよりも多くの行レベルロックを生成します。

2.行: SQL ステートメントのコンテキスト関連の情報は記録せず、変更されたレコードのみを保存します。

利点: Binlog は、実行された SQL ステートメントのコンテキスト関連の情報を記録する必要はなく、レコードが変更された内容のみを記録する必要があります。したがって、行レベルのログ コンテンツには、データ変更の各行の詳細が明確に記録されます。また、ストアドプロシージャ、関数、またはトリガー呼び出しとトリガーが特定の状況で正しくコピーされないという問題も発生しません。

デメリット: 実行されたすべてのステートメントがログに記録されると、各レコード行の変更として記録されるため、大量のログ コンテンツが生成される場合があります。たとえば、update ステートメントが複数のレコードを変更する場合、各変更が binlog に記録されるため、大量の binlog ログが発生します。特に、alter table などのステートメントを実行すると、テーブル構造の変更により各レコードが変更されるため、テーブルの各レコードがログに記録されます。

3.Mixedlevel: 上記の 2 つのレベルが混在しています。一般的なステートメントの変更では、ステートメント形式を使用して binlog を保存します。たとえば、一部の関数とステートメントはマスター スレーブ レプリケーション操作を完了できないため、行形式を使用して binlog を保存します。MySQL は、実行される特定の SQL ステートメントごとに記録するログ形式を区別します。つまり、ステートメントと行のいずれかを選択します。新しいバージョンの MySQL の行レベル モードも最適化されています。すべての変更が行レベルで記録されるわけではありません。たとえば、テーブル構造が変更されると、ステートメント モードで記録されます。更新や削除など、データを変更するステートメントについては、すべての行に対する変更が記録されます。

2. Binlogの基本構成とフォーマット設定

1. 基本的な準備

MySQL BInlog ログ形式は、MySQL my.cnf ファイルの属性 binlog_format で指定できます。たとえば、次のようになります。

binlog_format = MIXED //binlog ログ形式

log_bin = directory/mysql-bin.log //binlog ログ名

expire_logs_days = 7 // binlog の有効期限のクリーンアップ時間

max_binlog_size 100m //各binlogログファイルのサイズ

2. Binlogログ形式の選択

Mysql はデフォルトでステートメント ログ形式を使用しますが、MIXED が推奨されます。

いくつかの特殊な用途では、binlog ログを介してデータの変更を同期するなど、ROWED の使用を検討できます。これにより、関連する操作が大幅に節約されます。バイナリログデータの処理が非常に簡単になり、混合データに比べて解析も非常に簡単になります(もちろん、ログ量の増加によるIOオーバーヘッドが許容範囲内であることが前提です)。

3.mysqlbinlog形式の選択

MySQL のログ形式の選択原則: INSERT、UPDATE、DELETE などの直接テーブル操作を使用する場合、ログ形式は binlog_format の設定に従って記録されます。GRANT、REVOKE、SET PASSWORD などの管理ステートメントを使用する場合は、とにかく SBR モードを使用して記録されます。

三つ。 Mysql Binlog ログ分析

次のように、MysqlBinlog コマンドを使用して特定の mysql ログを表示します。

///

タイムスタンプを 1350355892/*!*/ に設定します。

始める

//*!*/;

# 1643330 で

#121016 10:51:32 サーバー ID 1 end_log_pos 1643885 クエリ thread_id=272571 exec_time=0 error_code=0

タイムスタンプを 1350355892/*!*/ に設定します。

T_test に挿入します。

//*!*/;

# 1643885 で

#121016 10:51:32 サーバー ID 1 end_log_pos 1643912 Xid = 0

専念 /*!*/;

///

1. 物事を始める時間:

タイムスタンプを 1350355892/*!*/ に設定します。

始める

2.sqlイベントの開始点

#at 1643330: イベントの開始点。1643330 バイトから始まります。

3. sqleventが発生した時刻

#121016 10:51:32: はイベントが発生した時刻です。

4.サーバーID

サーバーID 1: マスターのサーバーID

5.sqleventエンドポイントと経過時間、エラーコード

end_log_pos 1643885: イベントの終了ポイントで、1643885 バイトで終わります。

execTime 0: 経過時間

error_code=0: エラーコード

Xid: イベントはコミットされたXAトランザクションを示します

混合ログの説明:

スレーブ ログ同期プロセス中に、現在などの時間関数の場合、MIXED ログ形式は、対応する unix_timestamp()*1000 時間文字列をログに生成します。スレーブが同期を完了すると、sqlEvent が発生した時間を使用してデータの正確性を確保します。さらに、一部の機能については、スレーブが対応するデータ同期を完了できます。スレーブが状況を認識しない上記の一部の UDF 機能については、これらの Binlog は ROW 形式で保存され、生成された Binlog を使用してスレーブがデータ同期を完了できるようにします。

上記は、MySQL binlog を介してデータ同期を完了するモジュールを開発する前に調査中に蓄積された情報です。間違っている点があればご指摘ください。

要約する

これで、MySQL の Binlog の 3 つの形式の紹介と分析に関するこの記事は終了です。MySQL の Binlog の 3 つの形式の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • [MySQL binlog] MySQL の混合ログ形式の binlog を徹底的に解析する方法
  • mysql binlog ログを正しくクリーンアップする 2 つの方法
  • MySQL の Binlog 関連コマンドとリカバリテクニック
  • MySQL binlog を開く手順
  • MySQL データベースの Binlog 使用法の概要 (必読)
  • Mysql Binlogデータの表示方法の詳細な説明
  • MySQLのbinlogの処理
  • MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明
  • MySQL で binlog を使用する際のフォーマットの選択方法

<<:  Vuex でゲッターとアクションを使用するための追加手順

>>:  Linux におけるドライバモジュールのパラメータ転送プロセスの分析

推薦する

jsを使用して写真をアップロードする機能を実現する

フロントエンドで画像をアップロードする原理は、入力 type="file" タグ...

CentOS 上の Docker に Jupyter をインストールしてポートを開く方法

目次jupyterをインストールするDocker ポートマッピングjupyterをインストールするp...

MySQL インデックス失敗の原理

目次1. インデックス失敗の理由2. インデックスの秩序が崩れる状況を見てみましょう。 - インデッ...

ファイルアップロードスタイルの詳細を実装するjs

目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...

Adobe Brackets の簡単な使い方のグラフィックチュートリアル

Adobe Brackets は、HTML、CSS、JavaScript 用のオープンソースでシンプ...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

CSS3 はドラッグ可能なルービックキューブの 3D 効果を実現します

主に使用される知識ポイント: •css3 3D変換 •ネイティブjsマウスドラッグイベント•表示:グ...

nginx で仮想ホストを構成するための詳細な手順

仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...

インライン要素スパンの最小高さの定義

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

MySQL接続クエリの原理と応用

概要MySQL の最も強力な機能の 1 つは、データ取得を実行しながらテーブルを結合できることです。...

Centos7 ベースの Nginx Web サイト サーバーの構築の詳細説明 (仮想 Web ホストの構成を含む)

1. Nginx サービス基盤Nginx (エンジン x) は、パフォーマンスの最適化のために特別...

MySQLトランザクションとMySQLログの詳細な説明

取引特性1. アトミック性: トランザクションの開始後、すべての操作が完了するか、まったく実行されな...

MacでのMySQL初期化パスワード操作

Macでデータベースを操作する際に個人が遭遇するデータベース起動の問題の簡単な記録1. Apple-...

MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法

目次MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法1. 非同...