MySQL Binlogログ

4057 ワード

Thresh
Binlogレコードモード
Redo LogはInnoDBエンジン特有のログであり、MySQL Serverにも独自のログ、すなわちBinary log(バイナリログ)、略称Binlogがある.
Binlogは、すべてのデータベースのテーブル構造の変更やテーブルデータの変更を記録するバイナリログであり、SELECTやSHOWなどの操作は記録されません.
Binlogログはイベント形式で記録され、文の実行にかかる時間も含まれます.
Binlogログを開くには、次の2つの最も重要な使用シーンがあります.
    :      Binlog  ,        Binlog     ,    Binlog                。
    :  mysqlbinlog       。

Binlogファイル名のデフォルトは、oak_などの「ホスト名_binlog-シリアル番号」形式です.binlog-000001、プロファイルに名前を指定することもできます.
ファイル記録モードは、STATEMENT、ROW、MIXEDの3種類があり、具体的な意味は以下の通りである.
  • ROW(row-based replication, RBR)

  • ログには、各行のデータが変更されたことが記録され、slave側で同じデータが変更されます.
      :                ,                 。
      :    ,        ,   alter table      。
    
  • STATMENT(statement-based replication, SBR)

  • 各変更されたデータのSQLはmasterのBinlogに記録され、slaveはコピー時にSQLプロセスが元のmaster側で実行したものと同じSQLとして再実行されるように解析されます.SQL文コピーと略称します.
      :    ,    IO,         
      :                ,  last_insert_id()、now()   。
    
  • MIXED(mixed-based replication, MBR)

  • 以上の2つのモードの混合使用は、一般的にはSTATEMENTモードでbinlogを保存し、STATEMENTモードでコピーできない操作ではROWモードでbinlogを保存し、MySQLは実行したSQL文に基づいて書き込みモードを選択します.
    Binlog書き込みメカニズム
    よく使われるロゴイベントには、Query event、Row event、Xid eventなどがあります.binlogファイルの内容は各種ログイベントの集合である.
  • は、記録モードおよび動作に基づいてeventイベントをトリガするlog event(イベントトリガ実行機構)
  • を生成する.
  • トランザクション実行中にlog eventがバッファに書き込まれ、各トランザクションスレッドに1つのバッファ
  • がある.
    Log Event     binlog_cache_mngr     ,           ,   stmt_cache,            ;    trx_cache,           。
  • トランザクションは、コミットフェーズで生成されたlog eventを外部binlogファイルに書き込む.
  •           log event  binlog   ,         log event   binlog       ,           log event。

    Binlogファイルアクション
    Binlogステータスの表示
    show variables like 'log_bin';
    

    Binlog機能をオンにするにはmyを変更する必要があります.cnfかmy.iniプロファイル、[mysqld]の下にlog_を追加bin=mysql_bin_ロゴ、MySQLサービスを再起動します.
    #log-bin=ON 
    #log-bin-basename=mysqlbinlog 
    binlog-format=ROW 
    log-bin=mysqlbinlog
    

    オープン文の実行
    set global log_bin=mysqllogbin;
    

    show binlog eventsコマンドの使用
    show binary logs; //   show master logs; 
    show master status; 
    show binlog events; 
    show binlog events in 'mysqlbinlog.000001'\G;
      :
         Log_name: mysql_bin.000001   //  log       
            Pos: 174                 //log bin-log       
         Event_type: Intvar          //log      
            Server_id: 1  //        server_id,  log         
         End_log_pos: 202          //log bin-log       
            Info: INSERT_ID=2    //log       ,               
    

    mysqlが持っているツールmysqlbinlogで
    mysqlbinlog "   " mysqlbinlog "   " > "     :test.sql"
    

    binlogを使用してデータをリカバリする
    //        
    mysqlbinlog --start-datetime="2020-04-25 18:00:00" --stop-datetime="2020-04-26 00:00:00" mysqlbinlog.000002 | mysql -uroot -p1234 
    //         
    mysqlbinlog --start-position=154 --stop-position=957 mysqlbinlog.000002 | mysql -uroot -p1234
    

    mysqldump:データベースデータを定期的にすべてバックアップします.mysqlbinlog:インクリメンタルバックアップとリカバリ操作ができます.
    Binlogファイルの削除
    purge binary logs to 'mysqlbinlog.000001'; //       
    purge binary logs before '2020-04-28 00:00:00'; //            
    reset master; //      
    

    expire_を設定できます.logs_daysパラメータを使用して自動クリーンアップ機能を起動します.デフォルト値が0の場合、有効になっていません.1に設定するとbinlogファイルが1日を超えると自動的に削除されます
    Redo LogとBinlogの違い
  • Redo LogはInnoDBエンジン機能に属し、BinlogはMySQL Serverに属する機能であり、バイナリファイルで記録されている.
  • Redo Logは物理ログに属し、このデータページの更新状態の内容を記録し、Binlogは論理ログであり、更新プロセスを記録する.
  • Redoログはループライトで、ログ空間の大きさは固定で、Binlogは追加ライトで、1つを書き終わって次を書き終わって、上書きして使用しません.
  • Redo Logはサーバ異常ダウンタイム後のトランザクションデータの自動リカバリとして使用され、Binlogはプライマリ・レプリケーションとデータ・リカバリとして使用できます.Binlogには自動crash-safe能力がありません.

  • (crash-safeはInnoDBストレージエンジンにおいて、トランザクションのコミット中に任意の段階でMySQLが突然潰れ、再起動後にトランザクションの完全性が保証され、コミットされたデータが失われず、コミットされていないデータが自動的にロールバックされる.この能力はredo logとunod logの2つのログに依存する.)