binlog による MySQL データ復旧方法の紹介 (コード例)

不言
リリース: 2019-01-08 09:27:25
転載
5619 人が閲覧しました

この記事では、binlog を使用した MySQL データ復旧方法 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。あなたを助けます。

binlog ログの関連構成を理解することで、binlog を使用したデータベースのデータ回復操作を簡単に習得できます。

mysql ログ ファイル

成熟したソフトウェアには成熟したログ システムがあり、ソフトウェアで問題が発生した場合、これらのログは問題の原因を調べるための宝の山になります。同様に、mysql も例外ではありません。mysql の実行ステータスを記録する一連のログも存在します。

mysql には主に次のログがあります:

  • エラー ログ: mysql の操作中のエラー情報を記録します。

  • 一般的なクエリログ: クエリ、変更、更新などの各 SQL を含む、mysql が実行しているステートメントを記録します。

  • スロー クエリ ログ: クエリに時間のかかる SQL ステートメントを記録します

  • Binlog ログ: テーブル作成、データ更新などを含む、データ変更レコードを記録します。

これらのログは、my.db ファイルで構成する必要があります。 cnf ファイル (mysql を知らない場合) mysql コマンドを使用して構成ファイルのパスを見つけることができます。

mysql --verbose --help|grep -A 1 'Default options’ #该命令会罗列出my.cnf 顺序查找的路径。
ログイン後にコピー

binlog log

binlog はバイナリ ログです。テーブルを含むすべてのデータベース更新ステートメントを記録するバイナリ ログ ファイル。更新とレコード更新、つまりデータ操作言語 (DML) である binlog は、主にデータの回復とマスター/スレーブ レプリケーションの構成に使用されます。

#データ復旧: データベースが誤って削除された場合や発生した場合 説明できない事態が発生した場合、binlog を使用して特定時点のデータを復元できます。
  • マスター/スレーブ レプリケーション: データベースが更新されると、マスター データベースは binlog を介して記録し、更新するようにスレーブ データベースに通知します。これにより、マスターとスレーブのデータベース データの一貫性が保証されます。
  • ##Mysql は、機能に応じてサービス層モジュールとストレージ エンジン層モジュールに分かれており、サービス層はクライアント接続、SQL ステートメント処理の最適化、およびその他の操作を担当します。レイヤーはデータ ストレージとクエリを担当し、binlog はサービス レイヤー モジュールに属し、ログはエンジンに依存せず、データ エンジンのすべてのデータ変更が binlog ログに記録されます。データベースがクラッシュした場合、InnoDB エンジンが使用されている場合は、binlog ログで InnoDB REDO ログのコミット ステータスもチェックできます。
binlog ログのアクティブ化

ログのアクティブ化方法:

1. 構成を追加します

log_bin=ON
log_bin_basename=/path/bin-log
log_bin_index=/path/bin-log.index
ログイン後にコピー
2。 log-bin パラメータを設定するだけです

 log-bin=/path/bin-log
ログイン後にコピー

binlog ログがオンになると、mysql は log_bin_index で指定された .index ファイルを作成し、mysql によって使用されるすべての binlog ファイルが順番に記録されます。索引。 binlog ログには、指定された名前 (またはデフォルト値) に増分された番号が付加されます (例: bin-log.000001)。 次の 3 つの状況が発生すると、binlog ログが再構築されます。

ファイルサイズが max_binlog_size パラメータの値に達しました

フラッシュ ログ コマンドを実行します

mysql サービスを再起動します


binlog ログの形式

パラメータの値によってbinlog_format パラメータでは、binlog 形式を設定できます。オプションの値には、statement、row、mixed

  * statement 格式:记录数据库执行的原始 SQL 语句
  * row 格式:记录具体的行的修改,这个为目前默认值
  * mixed 格式:因为上边两种格式各有优缺点,所以就出现了 mixed 格式
ログイン後にコピー

binlog ログ表示ツール: mysqlbinlog

binlog はバイナリであるため、ファイルを他のファイルのように扱うことはできず、直接開いて表示することはできません。ただし、mysql は、バイナリ ファイルを解析できるバイナリ ログ表示ツール mysqlbinlog を提供します。もちろん、さまざまな形式でのログ解析の結果は異なります。

1. statement 格式日志,执行 mysqlbinlog  /path/bin-log.000001,可以直接看到原始执行的 SQL 语句
2. row格式日志,则可读性没有那么好,但仍可通过参数使文档更加可读 mysqlbinlog -v  /path/bin-log.000001
ログイン後にコピー
mysqlbinlog 2 つの非常に重要なパラメーターのペア

  1. --start-datetime  --stop-datetime 解析某一个时间段内的binlog;
  2. --start-position  --stop-position   解析在两个position之间的binlog;
ログイン後にコピー

データを復元するには binlog を使用します。

binlog を使用してデータを回復することは、基本的に、binlog を通じてすべての DML 操作を検索し、誤った SQL ステートメントを削除してから、データを回復するために長征の道を再度実行することです。

データ テーブルを作成し、初期値を挿入します

    CREATE TABLE `users` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `age` int(8) DEFAULT NULL,
              PRIMARY KEY (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
     INSERT INTO `users` (`id`, `name`, `age`)
        VALUES
            (null, '姓名一', 5);
ログイン後にコピー
最後の完全バックアップのデータベースとバイナリ ログの位置を見つけます (追記: もちろん、時間をかけて復元することもできます) 。ここでは、現在のステータスをバックアップの初期値として使用します。

    mysqldump -uroot -p T > /path/xxx.sql;   # 备份数据库
    show master status;   # 查看当前的position位置,此时值为154
ログイン後にコピー
Insert multiple records

  INSERT INTO `users` (`id`, `name`, `age`)
  VALUES
     (null, '姓名二', 13),
     (null, '姓名三', 14),
     (null, '姓名四', 15),
     (null, '姓名五', 16),
     (null, '姓名六', 17);
ログイン後にコピー
誤操作を行い、誤操作後に複数のデータを挿入しました
update users set age = 5;
 INSERT INTO `users` (`id`, `name`, `age`)
 VALUES
    (null, '姓名七', 16),
    (null, '姓名八', 18);
ログイン後にコピー
発見 誤操作後、まずmysqlの外部サービスを停止し、バックアップデータを使用して最新のデータに復元します。

mysqlbinlogコマンドを使用してバイナリファイルを解析し、確認します

    误操作发生在position为706位置,且上次正常操作的结束位置在513
    在1152到结尾位置有正常执行的SQL执行
ログイン後にコピー
Through mysqlbinlog このコマンドは、binlog ログから実行可能 SQL ファイルをエクスポートし、データを mysql

 mysqlbinlog --start-position=154  --stop-position=513  bin-log.000001 > /path/bak.sql;
 mysql -uroot -p < /path/bak.sql;
ログイン後にコピー
にインポートします。 間違った update ステートメントをスキップし、次のロジックを通じて後続の通常のステートメントを再実行します。ステップ 7 でデータ回復作業を完了します。

概要

いつでも、データベースのクラッシュが発生すると、人々は眉をひそめ、動揺します。 Binlog は、さまざまな状況下でのデータベースのクラッシュやデータ損失後の残念な薬であると言えます。この記事では、オフライン環境を介してデータベースのデータ回復実験を行っているだけです。何か問題がある場合は、アドバイスをお願いします。 # #この記事はここで終わります。MySQL についてさらに詳しく知りたい場合は、php 中国語 Web サイトの

MySQL チュートリアル

列に注目してください。 ! !

以上がbinlog による MySQL データ復旧方法の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート