時点別のMySQLデータベース復旧実績

時点別のMySQLデータベース復旧実績

はじめに: 時間ポイントによる MySQL データベースの復旧

image.jpg

どの企業にとっても、データは最も価値のある資産です。

データの整合性をどのように保護し、データが破損するのを防ぐか、障害が発生した場合にどのようにデータを保持するか、誤操作、ハッカーの侵入、データの改ざんなどが発生した場合にバックアップに基づいてどのようにデータを復元するかは、すべての技術者が注意を払う必要がある重要なポイントです。

Alibaba Cloud は、顧客へのサービス提供と、顧客データベースの継続的なデータ保護と低コストのバックアップ サービスの実現に尽力しています。さまざまな環境でデータに対して強力な保護と強力な回復を提供できます。極端なデータ損失やデータ破損の場合でも、RDS 管理および制御プラットフォームにはワンクリック復元機能があり、顧客が設定した時点に基づいて包括的なデータ復旧を実行できます。

1. ポイントインタイムリカバリの技術的実装

ある時点での誤った操作により顧客がデータを失った場合、RDS 管理サービスはどのようにデータを回復しますか?

ポイントインタイムリカバリの全体的な考え方は次のとおりです。完全なデータリカバリは、物理バックアップ + バイナリログリカバリ + バイナリログプルーニングで構成されます。

11.jpg

図1

まず、利用可能なバックアップ セットを取得し、そのバックアップ セットをターゲット インスタンスに適用し、次にターゲット インスタンスで復元する必要がある binlog ファイルを再生し、最後に binlog トリミングの形式で SQL ファイルを適用して、全体的なリカバリを実現します。

2. ポイントインタイムリカバリの管理および制御プロセス

1. リカバリ用のインスタンスを作成する

ソースデータベースのデータ全体を復元する必要がある場合、まずソースインスタンスと同じ仕様とネットワーク環境を持つターゲットインスタンスを作成する必要があります。

なぜこれをするのですか?

バックアップとリカバリはリスクの高い操作であるため、ソースインスタンスに直接復元すると、バックアップセットが利用できない、バイナリログが見つからないなどの問題が発生すると、失われたデータを回復できないだけでなく、元のデータも完全には保存されない可能性があります。したがって、リカバリには新しいインスタンスを使用することを強くお勧めします。

2. バックアップとリカバリの時点を指定する

お客様が意図せずデータベースの削除や変更などの一連の操作を行ってしまい、業務に支障が出たり障害が発生したりした場合、データ復旧のために操作の正確な時刻を特定するにはどうすればよいでしょうか。

方法 1: ログ監査機能を使用して、対応するエラー操作の時点を見つけることができます。

方法 2: バイナリログをテキストに解析し、対応するエラー操作の時点を照会できます。

3. バックアップ履歴から利用可能なバックアップセットを取得する

一般的に、ビジネスの重要性に基づいて、顧客はクラウド上で独自のデータベース バックアップ サイクルを計画し、RDS 管理はユーザーが選択したリカバリ時点に基づいて利用可能な物理バックアップ セットを自動的に検索します。

データベースの高可用性と災害復旧にはバックアップが最も重要であることがわかります。

4. バックアップセットに対応するバイナリログポイントを取得する

プライベート クラウドのバックアップは、通常、xtrabackup ツールに基づいています。 Xtrabackup はホット バックアップと高速リカバリという特徴があり、同時に、バックアップの最後に適用された binlog のファイルとポイントを対応するファイルに書き込みます。 RDS コントロールは、 binlogfilebinlogposなどの情報をデータベースに書き込みます。バックアップとリカバリが必要な場合は、リカバリのポイントが直接取得されます。

次の図に示すように:

2.jpg

図2

5. バックアップセットを宛先インスタンスに復元する

ステップ 1 ~ 4 は準備です。これでデータの復旧を開始します。データを復元する最初の手順は、利用可能な完全な物理バックアップ セットを宛先インスタンスにダウンロードし、xtrabackup ツールを使用して復元することです。

//​​まず、ターゲットインスタンス上のmysqlプロセスを停止します​

​systemctl を停止 mysql​

//​​次に、データをマージします。バックアップが /root/backup/ ディレクトリに解凍されていると仮定すると、復元するインスタンス ポートを指定できます。指定するには、--defaults-file パラメータを追加する必要があります。デフォルトは 3306 です。​

innobackupex --apply-log /root/backup/

​//​​元のディレクトリファイルを削除します​

rm -rf /データ/mysql

// データ セットを復元します。データが復元されるディレクトリは、構成ファイル my.cnf の datadir によって決まります。このフィールドの正確性を確認する必要があります。

innobackupex --copy-back /root/backup/

​//​​ディレクトリ認証​

chown ​​-​​R mysql:mysql ​​/​​data​​/​​mysql

6. 復元が成功したことを確認する

管理サービスは、続行するかどうかを決定する前に、復元が成功したかどうかを確認する必要があります。検証手順も非常に単純で大まかです。バックアップ回復ログに ERROR があるかどうか、最後の行が正常に完了しているかどうかを確認するだけです。

次の図は、成功したバックアップとリカバリを示しています。

3.jpg図3

7. リカバリ用のbinlogログを取得する

この手順は、回復の成功とデータの整合性にとって重要です。

では、RDS 管理サービスはどのようにしてリカバリ用の正しいバイナリログを取得するのでしょうか?下の写真を見てみましょう。

2.jpg

図4

たとえば、現在のバックアップには合計 8 つのバイナリログ バックアップ (000-008) があります。まず、物理バックアップに記録されたバイナリログのファイル名と位置 (上図の binlog004 など) から最初のバイナリログを取得します。次に、お客様が復元するように設定した時点のタイムスタンプ (上図の binlog007 など) から対応する最後のバイナリログを見つけます。最後に、4 つのバイナリログ バックアップ (binlog004、binlog005、binlog006、binlog007) を復元先のインスタンスにダウンロードします。

リカバリ時に誤ったバイナリログを取得した場合、例えば、binlog003/binlog005 を誤って最初のバイナリログに設定した場合、binlog003/binlog005 で実行された DML 文が新しいインスタンスで再実行され、リカバリされたデータが増加したり、欠落したりします。例えば、binlog0006 や binlog0008 を誤って最後のバイナリログに設定した場合、リカバリされたデータが欠落し、期待した効果が得られません。

8. リプレイリレーログ

ダウンロードしたバイナリログを新しいインスタンスの logdir にコピーし、最後のバイナリログ (リカバリ時点をカバーするバイナリログ) を除くバイナリログの名前を relaylog に変更し、新しいインスタンスを使用してこれらのリレーログを再生します。

​//​​binlog の名前を変更します。relaylog ファイル名は、mysql インスタンスで '%relay%' などの show variables を実行することで表示できます。​

mysql​​-​​bin を MySQL2​​-​​relay​​-​​bin に名前変更 mysql​​-​​bin​​*​

​//​​リレー情報をインデックスファイルに初期化します​

​ls .​​/​​MySQL2​​-​​relay​​-​​bin.​​0000​​*​​​​>​​MySQL2​​-​​relay​​-​​bin.index​

​//​​これらのファイルをデータファイルにコピーします​

​cp MySQL2-relay-bin.*/data/mysql/​

​//​​ファイル認証​

chown ​​-​​R mysql:mysql ​​/​​data​​/​​mysql​

​//​​mysqlインスタンスを起動します​

​systemctl で MySQL を起動します​

// マスターを存在しないインスタンスに変更し、このインスタンスをスタンバイ データベースとしてシミュレートし、空のマスター データベースを指定して、SQL スレッドを作成し、バックアップ レコードの binlogfile と binlogpos に従って設定します。スレーブのsql_threadを開始します

​マスターを MASTER_HOST​​=​​'1.1.1.1'​​、RELAY_LOG_FILE​​=​​'MySQL2-relay-bin.000011'​​、RELAY_LOG_POS​​=​​160338​​ に変更します。​

​スレーブSQL_THREADを開始します。

​スレーブステータスを表示\G

9. リレーログの再生が成功したことを確認する

show slave status\G を実行して確認します。この手順は、データベース バイナリログの数とサイズに応じて、通常、回復に時間がかかります。

検証 1: relay_log_file フィールドの値が、MySQL2-relay-bin.index ファイルに保持されている最大値であるかどうかを確認します。そうであれば、すべてのバイログが正常に再生されたことが証明されます。

検証 2: Slave_SQL_Running フィールドが YES かどうかを確認します。

次の図に示すように:

4.jpg

図5

10. mysqlbinlog関数を使用して、リカバリ時点でのbinlogをトリミングし、sqlファイルを生成します。

この時点で、手順 1 ~ 9 でほとんどのデータが回復されましたが、回復時点をカバーする binlog が 1 つ残っていますが、まだ回復されていません。

それで、どうやってやるのでしょうか?

次の図に示すように:

3.jpg

図6

お客様の時点(15:00 に復元する必要があるデータなど)に応じて、RDS 管理は、リカバリ時間に応じてリカバリ時点をカバーするバイナリログをトリミングする必要があります。つまり、12:00 から 15:00 のデータのみが適用されます。15:00 から 18:00 のデータはエラー操作時間に属しているため、使用しないでください。

//​​mysqlbinlogツールのプルーニング機能を使用して、binlogをプルーニングします

mysqlbinlog ​​--​​start​​-​​position​​=​​4​​​​--​​stop​​-​​datetime​​=​​'2021-04-23 15:00:00'​​​​-​​R ​​-​​h127.​​0.0​​.​​1​​​​-​​uroot ​​-​​pxxxx ​​-​​P3306 mysql​​-​​bin.​​007​​​​>​​​​/​​tmp​​/​​mysql​​-​​bin.​​007.​​sql

11. ターゲットインスタンスはSQLファイルを通じて復元するデータを実行します。

ターゲットインスタンスで SQL ファイルを実行します。

//​​エンパワーメント​

chown mysql:mysql ​​/​​tmp​​/​​mysql​​-​​bin.​​007.​​sql​

​//​​データを回復する​
mysql -uroot -pxxxx -h127.0.0.1-P3306 -f --max_allowed_pa​​cket=1073741824 </root/mysql-bin.007.sql

12. データの検証

この時点で、全体的なバックアップとリカバリは完了しています。次に、お客様はデータを検証し、宛先インスタンスのデータをソース インスタンスに復元する必要があります。

私たちは、Alibaba Cloud Intelligent Global Technical Service-SRE チームです。ビジネスシステムの高可用性を保証する、テクノロジーベースのサービス指向のエンジニアリングチームになることを目指しています。私たちは、お客様がクラウドをより有効に活用し、クラウドに基づいてより安定した信頼性の高いビジネスシステムを構築し、ビジネスの安定性を向上させるために、専門的で体系的な SRE サービスを提供しています。私たちは、企業のお客様がクラウドに移行し、クラウドを有効に活用し、お客様のクラウドビジネス運営の安定性と信頼性を高めるのに役立つテクノロジーをさらに共有したいと考えています。DingTalkを使用して以下のQRコードをスキャンすると、Alibaba Cloud SRE Technology Academy DingTalkサークルに参加し、クラウド上のより多くの人々とクラウドプラットフォームについてコミュニケーションをとることができます。

元のリンク: https://developer.aliyun.com/article/784887?

著作権に関する声明:この記事の内容は、Alibaba Cloud の実名登録ユーザーによって寄稿されたものです。著作権は原作者に帰属します。Alibaba Cloud Developer Community は著作権を所有しておらず、対応する法的責任を負いません。具体的なルールについては、「Alibaba Cloud Developer Community ユーザーサービス契約」および「Alibaba Cloud Developer Community 知的財産保護ガイドライン」を参照してください。このコミュニティで盗作の疑いのあるコンテンツを見つけた場合は、著作権侵害の苦情フォームに記入して報告してください。確認後、このコミュニティは著作権侵害の疑いのあるコンテンツを直ちに削除します。

これで、時点別のMySQLデータベースの実用的復旧に関するこの記事は終了です。MySQLデータベース復旧に関するより関連性の高いコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL バイナリログデータ復旧: 誤ってデータベースを削除した場合の詳細な説明
  • MySQLデータベースの操作とメンテナンスのデータ復旧方法
  • Navicat for MySQLのスケジュールされたデータベースバックアップとデータ復旧の詳細
  • MySQLバイナリログを介してデータベースデータを復元する方法の詳細な説明
  • MySQLデータベースを誤って削除した後にデータを回復するための手順
  • mysqldump (MySQL データベースのバックアップとリカバリ) の使用方法についての簡単な説明
  • mysql バイナリ ログ ファイル データベースの復元
  • MySQLデータベースのログファイル(binlog)を自動的に復元する方法を説明します

<<:  Vue グローバル フィルターの概念、注意事項、基本的な使用方法

>>:  Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

推薦する

SQL 集計、グループ化、並べ替え

目次1. 集計クエリ1. COUNT関数2. SUM関数3. AVG関数4. MAX関数とMIN関数...

JavaScript 基礎シリーズ: 関数とメソッド

目次1. 関数とメソッドの違い2. 良い関数の書き方2.1 正確な命名2.1.1 関数の命名2.1....

Angularの親子コンポーネント通信の詳細な説明

目次使用されるAPI簡単な例人.ts親コンポーネントサブコンポーネント効果要約する使用されるAPI ...

MySQLがフルテーブルスキャンを実行するいくつかの状況

目次ケース1:ケース2:ケース3:簡単にまとめると:過去 2 日間で、完全なテーブル スキャンを引き...

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

効率的な視覚化Nginxログ表示ツール

目次導入インストール表示フィールドフィルターソートキー導入Rhit は、標準フォルダー (gzip ...

JavaScriptプロトタイプチェーンを理解する

目次1. プロトタイプとプロトタイプチェーンの平等関係を理解する2: プロトタイプとプロトタイプ チ...

Nginx 静的サービス設定の詳細な説明 (ルートとエイリアスの指示)

静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...

html の img src="" で js 関数または js 変数を呼び出して、画像パスを動的に指定します。

この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...

js SMS認証コード入力ボックスを手動で実装する

序文この記事では、私が手動で実装したフロントエンドの一般的な SMS 認証コード入力コンポーネントと...

Linux で複数のファイルの名前を一括で変更する方法

Linux では、通常、ファイルの名前を変更するために mv コマンドを使用します。これは、単一のフ...

Vue+nodeはオーディオ録音・再生機能を実現

結果: コードロジックを実装するのが主な部分であり、具体的なページ構造を一つ一つ紹介することはありま...

トークン生成と検証を実装するミニプログラム

目次プロセスデモミニプログラムバックエンドインターフェースプロセス各リクエストインターフェースは検証...

CentOS 7.5 が Varnish キャッシュサーバー機能を導入

1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...