1. はじめに 少し前、開発者がテスト環境や本番環境で誤った操作をし、データベースを誤って削除/更新してしまうというケースが相次ぎました。DBA にとって、データのロールバックは本当に頭の痛い作業です。オンライン データを復元するとなると、アプリケーションに何らかの影響が出るのは避けられません。ほとんどの場合、開発者は誤った操作によりデータを削除し、ほとんどの行を更新します。この記事では、これまでの操作経験に基づいて、一般的な回復方法を紹介します。 2. 一般的な回復方法 2.1 バックアップからの復元 この方法を使用する前提は、最新のバックアップセットを持っているか、エラー操作が開始されたbinlogの位置またはGTIDを知っていて、バックアップセットを使用して中間マシンに復元し、MySQLのスレーブ機能を使用することです。
until_option:
一時インスタンスに復元し、誤って削除および更新されたデータをダンプして、古いインスタンスに復元します。データの回復中は、影響を受けるテーブルを書き込み可能にしないことが最善です。そうしないと、目的の結果を達成することが難しくなります。たとえば、a=2 が誤って a=4 に更新され、回復期間中に a=7 に更新され、回復後に a=2 に復元されます。 このリカバリ方法は、多数のデータベースのリカバリには適しておらず、一時インスタンスが必要です。 2.2 オープンソースツールbinlog2sqlを使用して復元する binlog2sql は、Dianping の DBA によって開発されたツールです。binlog を解析して削除を挿入に復元し、更新値セット フィールドと where 条件を交換してデータを復元します。 使用制限 MySQL binlog形式は行インストールである必要があります git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql pip インストール -r 要件.txt 使用法 使用方法: binlog2sql.py [-h HOST] [-u USER] [-p パスワード] [-P ポート] [--start-file スタートファイル] [--開始位置 STARTPOS] [--stop-file ENDFILE] [--stop-position ENDPOS] [--start-datetime 開始時刻] [--stop-datetime 停止時刻] [--stop-never] [-d [データベース [データベース ...]]] [-t [テーブル [テーブル ...]]] [-K] [-B] [ - ヘルプ] 例 テーブルフラッシュバックを作成( id int(11) NULLでない auto_increment 主キー , stat int(11) NULLでない デフォルト 1 ) エンジン=innodb デフォルトの文字セット=utf8; フラッシュバックに挿入(統計) 値(2)、(3)、(4)、(7)、(9)、(22)、(42)、(33)、(66)、(88) 誤操作
データを回復する手順 1. エラーのある DML が配置されている binlog を取得します。ただし、開発者は通常、特定の binlog を知りません。開発者が知っているのは、エラーのある操作がいつ発生したかだけです。Binlog2sql は、時間範囲によるリカバリをサポートしています。 mysql> マスターログを表示します。 +------------------+-----------+ | ログ名 | ファイルサイズ | +------------------+-----------+ |mysql-bin.000009 | 177 | |mysql-bin.000010 | 464 | |mysql-bin.000011 | 8209 | +------------------+-----------+ セット内の 3 行 (0.00 秒) この例では、binlogはmysql-bin.000011です。 2. binlog2sqlを使用してデータを復元します。まず、binlogを解析して更新ステートメントの開始位置を取得します。この例では、開始位置は5087、終了位置は5428です。次のコマンドを実行します。 python binlog2sql.py -h127.0.0.1 -P3307 -udba -p'dbadmin' -dyang -tflashback --start-file='mysql-bin.000011' binlog2sql -Bパラメータを使用して復元されたSQLを取得します 取得したSQLをデータベースに対して実行します。実際に本番環境で問題が発生した場合には、必ず開発者とコミュニケーションを取り、復元する必要がある正確なレコードを確認してください。 mysql> フラッシュバックから * を選択します。 +----+------+ | ID | 統計 | +----+------+ | 1 | 2 | | 2 | 3 | | 3 | 4 | | 4 | 7 | | 5 | 9 | | 6 | 22 | | 7 | 42 | | 8 | 33 | | 9 | 66 | | 10 | 88 | +----+------+ セット内の行数は 10 です (0.00 秒) binlog2sql の機能: MySQL サーバーを起動する必要があり、オフライン モードでは利点を解析できません (mysqlbinlog と比較)。 純粋な Python 開発で、インストールと使用が簡単です。 フラッシュバックおよび主キーなしの解析モードが付属しているため、パッチは必要ありません。 フラッシュバックモードはフラッシュバック戦闘に適しています。 理解とデバッグを容易にするために標準 SQL に解析します。 コードは簡単に変更でき、よりパーソナライズされた分析をサポートできます。 実際、MySQL には sql_safe_updates というパラメータも用意されており、これは where 条件のない削除および更新ステートメントを禁止します。具体的な使い方や導入については、MySQLの公式紹介を参照してください。 結論 この記事では、誤った操作からデータを回復する 2 つの方法を簡単に紹介しました。実際には、mysqlbinlog を使用してデータを回復するスクリプトを作成したり、フラッシュバック パッチや Qunar のインセプションを使用したりなど、他の方法もあります。引き続き学習してください。データセキュリティの保護は DBA の基本的な責任です。毎年、誤ってデータを削除したことによるさまざまな悲劇が発生しています。すべての DBA が自分のライフラインを守れることを願っています。 上記は、MySQL データを復旧する 2 つの方法の詳細です。MySQL データ復旧の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: Linux Centos でスクリプトを使用して Docker をインストールする方法
>>: VueはEChartsを使用して折れ線グラフと円グラフを実装します
目次1.kvmの展開1.1 kvmのインストール1.2 kvm Web管理インターフェースのインスト...
ウェブサイトのモバイル版には、少なくともいくつかの基本機能が必要です。 1. ページの適用性の問題:...
最終的な解決策は最後の写真にありますリモート データベース ( Linux システム) に接続したと...
スタイル ガイドとは何でしょうか? 簡単に言えば、ストーリーを伝える方法を説明するドキュメントです。...
目次インデックスタイプインデックス構造非クラスター化インデックスクエリインデックスカバー要約するイン...
この記事の例では、検証コードの動的干渉を実装するためのjsの具体的なコードを共有しています。具体的な...
目次VARCHAR 型と CHAR 型結論: VARCHAR 型と CHAR 型VARCHAR と ...
目次序文ソースコード学習の第一歩はどこから始めればよいでしょうか?写真から始めましょうソースコードを...
目次背景成し遂げる1. カプセル化された /utils/dialogControl.js 2.ダイア...
問題の原因:スレーブサーバーがクローンマスターサーバーである場合、server-uuidの値は同じで...
DataframeはSpark 1.3.0で導入された新しいAPIで、Sparkで大規模な構造化デー...
序文スロークエリとは何か、またスロークエリを最適化するにはどうすればよいか。以下では、これら 2 つ...
目次1. ルーティングアニメーション2. グループクエリとスタガー1. ルーティングアニメーションル...
1. データベースとデータベースインスタンスMySQL の研究では、データベースとデータベース イン...
MySQL のデータ フィールドのタイプを定義することは、データベースを最適化するために非常に重要で...