1. binlogの紹介binlog はバイナリ ログ、バイナリ ログ ファイルです。データベースによって実行されたすべての DDL および DML ステートメント (select や show などのデータ クエリ ステートメントを除く) を記録し、イベントの形式で記録してバイナリ ファイルに保存します。 Binlog には、主に 2 つのアプリケーション シナリオがあります。1 つはレプリケーション用です。マスターはバイナリ ログをスレーブに渡して、マスターとスレーブ間のデータの一貫性を実現します。 2 つ目は、データの回復用です。たとえば、バックアップを復元した後、バックアップ後に新しく生成された binlog を再実行して、データベースを最新の状態に保つことができます。これら 2 つの主な用途に加えて、binlog は異種システム間のデータ相互作用にも使用できます。binlog は、レコードの前後のレコードを完全に保存します。DTS サービスを使用すると、MySQL データをほぼリアルタイムで HBase、Hive、Spark などの基盤となるデータ プラットフォームに抽出し、OLTP と OLAP を接続できます。 binlog ログには、
デフォルトの binlog モードは、MySQL 5.7.7 より前では STATEMENT であり、それ以降のバージョンでは ROW です。 ROW モードの方が安全であり、データ変更の各行の詳細を明確に記録できるため、ここでは ROW モードを使用することをお勧めします。 2. Binlog関連のパラメータBinlog はデフォルトでは有効になっていませんが、通常は、初期化時に構成ファイルに log-bin パラメータを追加して、binlog を有効にすることをお勧めします。 # 設定ファイルにlog-bin設定を追加する[mysqld] ログビン = binlog # パスを指定しない場合は、データディレクトリがデフォルトになります。パス [mysqld] を指定することもできます。 ログ bin = /data/mysql/logs/binlog # データベースで binlog が有効になっているかどうかを確認します 'log_bin%' のような変数を表示します。 binlog を有効にした後、binlog 関連のいくつかのパラメータに注意する必要があります。以下は、関連するパラメータの簡単な紹介です。
binlog の操作と管理に関連する SQL ステートメントも多数あります。次に、よく使用されるステートメントをいくつか示します。 3. バイナリログの内容を分析する前述したように、データベースへのすべての変更は binglog に記録されます。ただし、binlog はバイナリ ファイルであるため、直接表示することはできません。より直感的に観察したい場合は、mysqlbinlog コマンド ツールを使用する必要があります。次の内容では、主に mysqlbinlog を使用して binlog ログの内容を解析する方法を紹介します。 ストーリーをスムーズに展開するために、まずはbinlogに切り替え、テストライブラリとテストテーブルを作成し、データを挿入して、データを更新します。これらの事前操作は現時点では表示されません。生成された binlog コンテンツを解析して表示する方法を見てみましょう。 # この分析は MySQL 8.0 に基づいており、インスタンスでは gtid が有効になっており、モードは ROW です。 [root@centos ログ]# mysqlbinlog --no-defaults --base64-output=decode-rows -vv binlog.000013 /*!50530 @@SESSION.PSEUDO_SLAVE_MODE を 1 に設定します*/; /*!50003 @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0 に設定*/; ... ... #200708 16:52:09 サーバー ID 1003306 end_log_pos 1049 CRC32 0xbcf3de39 クエリ thread_id=85 exec_time=0 error_code=0 Xid = 1514 `bindb`/*!*/ を使用します。 タイムスタンプを 1594198329/*!*/ に設定します。 @@session.explicit_defaults_for_timestamp=1/*!*/ を設定します。 /*!80013 @@session.sql_require_primary_key を 0 に設定します*//*!*/; テーブル `bin_tb` を作成します ( `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自動増分主キー', `stu_id` int(11) NOT NULL COMMENT '学生ID', `stu_name` varchar(20) デフォルト NULL コメント '学生名', `create_time` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成時刻', `update_time` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '変更時刻', 主キー (`increment_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='テスト binlog' //*!*/; # 1049 で #200708 16:52:45 サーバー ID 1003306 end_log_pos 1128 CRC32 0xf19ea0a9 GTID last_committed=2 シーケンス番号=3 rbr_only=yes original_committed_timestamp=1594198365741300 immediate_commit_timestamp=1594198365741300 transaction_length=468 /*!50718 トランザクション分離レベルを READ COMMITTED に設定*//*!*/; # オリジナルコミットタイムスタンプ=1594198365741300 (2020-07-08 16:52:45.741300 CST) # 即時コミットタイムスタンプ=1594198365741300 (2020-07-08 16:52:45.741300 CST) /*!80001 @@session.original_commit_timestamp=1594198365741300* を設定します//*!*/; /*!80014 @@session.original_server_version=80019* を設定します//*!*/; /*!80014 @@session.immediate_server_version=80019* を設定します//*!*/; @@SESSION.GTID_NEXT= '0032d819-2d32-11ea-91b5-5254002ae61f:24883' を設定します。 # 1128 で #200708 16:52:45 サーバー ID 1003306 end_log_pos 1204 CRC32 0x5b4b03db クエリ thread_id=85 exec_time=0 error_code=0 タイムスタンプを 1594198365/*!*/ に設定します。 始める //*!*/; # 1204 で #200708 16:52:45 サーバー ID 1003306 end_log_pos 1268 CRC32 0xd4755d50 Table_map: `bindb`.`bin_tb` が番号 139 にマップされました # 1268 で #200708 16:52:45 サーバー ID 1003306 end_log_pos 1486 CRC32 0x274cf734 Write_rows: テーブル ID 139 フラグ: STMT_END_F ### `bindb`.`bin_tb` に挿入します ### セット ### @1=1 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1001 /* INT meta=0 nullable=0 is_null=0 */ ### @3='from1' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### `bindb`.`bin_tb` に挿入します ### セット ### @1=2 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1002 /* INT meta=0 nullable=0 is_null=0 */ ### @3='dfsfd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ... # 1486 で #200708 16:52:45 サーバー ID 1003306 end_log_pos 1517 CRC32 0x0437e777 Xid = 1515 専念 /*!*/; ... # 1596年 #200708 16:54:35 サーバー ID 1003306 end_log_pos 1681 CRC32 0x111539b6 クエリ thread_id=85 exec_time=0 error_code=0 タイムスタンプを 1594198475/*!*/ に設定します。 始める //*!*/; # 1681年 #200708 16:54:35 サーバー ID 1003306 end_log_pos 1745 CRC32 0x6f0664ee Table_map: `bindb`.`bin_tb` が番号 139 にマップされました # 1745年 #200708 16:54:35 サーバー ID 1003306 end_log_pos 1939 CRC32 0xfafe7ae8 Update_rows: テーブル ID 139 フラグ: STMT_END_F ### `bindb`.`bin_tb` を更新します ###どこ ### @1=5 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1005 /* INT meta=0 nullable=0 is_null=0 */ ### @3='dsfsdg' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### セット ### @1=5 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1005 /* INT meta=0 nullable=0 is_null=0 */ ### @3=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198475 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### `bindb`.`bin_tb` を更新します ###どこ ### @1=6 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1006 /* INT meta=0 nullable=0 is_null=0 */ ### @3='fgd' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### セット ### @1=6 /* INT meta=0 nullable=0 is_null=0 */ ### @2=1006 /* INT meta=0 nullable=0 is_null=0 */ ### @3=NULL /* VARSTRING(60) meta=60 nullable=1 is_null=1 */ ### @4=1594198365 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ### @5=1594198475 /* TIMESTAMP(0) meta=0 nullable=0 is_null=0 */ ... # 1939年 #200708 16:54:35 サーバー ID 1003306 end_log_pos 1970 CRC32 0x632a82b7 Xid = 1516 専念 /*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* mysqlbinlog によって追加されました */ /*!*/; 区切り文字 ; # ログファイルの終了 /*!50003 COMPLETION_TYPE を @OLD_COMPLETION_TYPE に設定*/; /*!50530 @@SESSION.PSEUDO_SLAVE_MODE を 0 に設定します*/; # バイナリログには、各 SQL ステートメントの実行によって生じた変更が詳細に記録されていることがわかります。 また、実行時間、pos の場所、server_id などのシステム値も含まれます。 特定のデータベースまたは特定の期間内の操作のみを解析するなど、mysqlbinlog ツールを使用するためのヒントは他にもたくさんあります。以下に一般的なステートメントをいくつか示します。詳細については、公式ドキュメントを参照してください。
IV. 結論いつの間にかかなり長くなってしまった記事です。binlogに関する様々な豆知識を解説しています。読んでいただければbinlogへの理解が深まるかと思います。実際、最も重要なのは練習です。より多くを学び、より多く使用することでのみ、より上手に習得することができます。これは非常に重要な知識なので、必要なときに読んでいただければ幸いです。より多くの人に見てもらえるよう、転送したり共有したりしていただければ幸いです。 上記はMySQL binlogの解析の詳細な内容です。MySQL binlogの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Docker が PostgreSQL を起動するときに複数のデータベースを作成するためのソリューション
MySQL 最大接続数の表示と最大接続数の変更1. 最大接続数を確認する '%max_con...
CSS 要素内の計算されたスタイル (つまり、カスケード後の最終的なスタイル) を取得するには、W3...
導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...
この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有して...
フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...
目次Vue.jsにおける属性とプロパティ値および関連する処理として属性とプロパティの概念属性とプロパ...
導入MySQL データベースの読み取りと書き込みの分離を設定すると、データベースに対する書き込み操作...
<br />ホームページの右側にあるスクロールバーを削除するにはどうすればよいですか? ...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...
テンプレート <el-table :data="データリスト"> &...
序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...
目次1.ライフサイクルとは何か2. 読み込みプロセス1.コンストラクタ2. レンダリング3. コンポ...
目次ノードイベントループイベントループ図メインスレッドイベントループタイマーキューの仕組み投票キュー...
概要MySQL データベースで主キーのないテーブルを表示するための SQL ステートメントをいくつか...
/**************************** * システムコール**********...