この記事では、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 ログのアクティブ化
- マスター/スレーブ レプリケーション: データベースが更新されると、マスター データベースは binlog を介して記録し、更新するようにスレーブ データベースに通知します。これにより、マスターとスレーブのデータベース データの一貫性が保証されます。
- ##Mysql は、機能に応じてサービス層モジュールとストレージ エンジン層モジュールに分かれており、サービス層はクライアント接続、SQL ステートメント処理の最適化、およびその他の操作を担当します。レイヤーはデータ ストレージとクエリを担当し、binlog はサービス レイヤー モジュールに属し、ログはエンジンに依存せず、データ エンジンのすべてのデータ変更が binlog ログに記録されます。データベースがクラッシュした場合、InnoDB エンジンが使用されている場合は、binlog ログで InnoDB REDO ログのコミット ステータスもチェックできます。
ログのアクティブ化方法:
1. 構成を追加しますlog_bin=ON
log_bin_basename=/path/bin-log
log_bin_index=/path/bin-log.index
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 はバイナリであるため、ファイルを他のファイルのように扱うことはできず、直接開いて表示することはできません。ただし、mysql は、バイナリ ファイルを解析できるバイナリ ログ表示ツール mysqlbinlog を提供します。もちろん、さまざまな形式でのログ解析の結果は異なります。1. statement 格式日志,执行 mysqlbinlog /path/bin-log.000001,可以直接看到原始执行的 SQL 语句
2. row格式日志,则可读性没有那么好,但仍可通过参数使文档更加可读 mysqlbinlog -v /path/bin-log.000001
1. --start-datetime --stop-datetime 解析某一个时间段内的binlog; 2. --start-position --stop-position 解析在两个position之间的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 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);
误操作发生在position为706位置,且上次正常操作的结束位置在513 在1152到结尾位置有正常执行的SQL执行
mysqlbinlog --start-position=154 --stop-position=513 bin-log.000001 > /path/bak.sql; mysql -uroot -p < /path/bak.sql;
概要
いつでも、データベースのクラッシュが発生すると、人々は眉をひそめ、動揺します。 Binlog は、さまざまな状況下でのデータベースのクラッシュやデータ損失後の残念な薬であると言えます。この記事では、オフライン環境を介してデータベースのデータ回復実験を行っているだけです。何か問題がある場合は、アドバイスをお願いします。 # #この記事はここで終わります。MySQL についてさらに詳しく知りたい場合は、php 中国語 Web サイトのMySQL チュートリアル
列に注目してください。 ! !
以上がbinlog による MySQL データ復旧方法の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。