背景 まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バックアップ ソリューションを採用し、増分バックアップは binlog サーバー方式を使用しています。そのため、いかに迅速に復元するかが、検討すべき問題となります。 回復のニーズ 私のこれまでの経験によると、バックアップからデータを復元する必要があるシナリオは通常、次のとおりです。 1. ライブラリが誤って削除されました 2. テーブルが誤って削除されました。タイプは TRUNCATE または DROP です。 3. 列が誤って削除されました。タイプは ALTER ... DROP COLUMN です。 4. データが誤って削除されました。タイプは DELETE、UPDATE、または REPLACE です。 5. テーブルスペースが破損しているか、不良ブロックが発生している シナリオに応じて、大まかに 2 つのカテゴリに分けることができます。
2 番目のタイプのリカバリ要件は、一般的に扱いやすいものです。業界でよく知られている binlog2sql や MyFlash などの binlog ロールバック ツールを使用できます。ここでは詳細には触れず、最初のタイプの要件に焦点を当てます。 迅速な復旧という目標を達成するために、業界の DBA が頻繁に採用するアプローチは、遅延スレーブ データベースを導入して問題を解決することです。現在、当社のすべてのコア DB には遅延スレーブ データベースが導入されています。しかし、遅延スレーブであっても、遅延時間を逃したり、後で回復するために遅延スレーブを使用するときに間違った場所を指定したりして、誤って削除された DDL がスレーブにも適用されてしまうと、遅延スレーブをライフラインとして使用できなくなります。 完全リカバリ(異なるマシンでのリカバリ) 現時点では、バックアップを通じてのみデータを復元できます。まず、完全バックアップ(通常は xtrabackup によってバックアップされた物理バックアップ)を復元する必要があります。バックアップがリモート マシン上にあると仮定すると、完全なバックアップ回復を実行するには次の手順を実行する必要がある場合があります。
バックアップとリカバリの追加 この時点で、完全バックアップが復元され、次のステップは増分リカバリです。以前のバックアップ計画によれば、増分データの回復を完了するには binlog を使用する必要があります。バイナリログのリカバリには通常、次の手順が必要です。
binlog を復元する方法は多数あります。元のマスター上の binlog または binlogserver 上の binlog を使用できます。必要なのは、binlog リカバリのエンドポイントを見つけることだけです。 バックアップとリカバリの最適化 この時点で、binlog リカバリを使用するのは少し面倒だと思うかもしれません。確かにその通りです。mysqlbinlog コマンドでは、どの GTID に復元するかを指定する方法はありません。復元する必要のある GTID に対応する POS 位置を見つけるには、binlog を解析することしかできませんが、これを自動的に実装するのは面倒です。また、mysqlbinlog コマンドを使用してリストアする場合は、シングルスレッドのリカバリになります。リストアする必要がある binlog の量が比較的多い場合は、この増分リカバリにかかる時間が想像できます。 では、binlog アプリケーションを高速化する方法はありますか?ここで、MySQL 5.7 の並列レプリケーションについて考えます。SQL スレッドの並列レプリケーションを使用できれば、この問題は解決されるでしょうか? マスターでのバイナリログのリカバリ 完全復旧の時点に戻り、新しいインスタンスを元のマスターのスレーブにして、指定された GTID 位置に復元しますか?はい、これは非常に単純で簡単、かつエラーが発生しやすい方法です。また、並列レプリケーションの原理を使用して、binlog アプリケーションを高速化することもできます。ただし、この方法の要件の 1 つは、元のマスターの最も古いバイナリログに必要な開始リカバリ ポイントが含まれていることです。これは簡単に考えられるため、これが推奨されるリカバリ方法になります。 binlogserver での Binlog リカバリ マスター上の元の binlog が消去されていると仮定すると、binlog から復元する必要があります。 binlogserver 上の binlog を元のマスターにコピーし、その後 binlog インデックスを変更して登録の目的を達成することを考える人もいるかもしれません。実際には、これはお勧めできません。具体的な理由については、「binlog ファイルを手動で登録すると、マスターとスレーブの異常が発生する」を参照してください。 どのようなアプローチを取ることができますか?これは、binlogserver を使用してマスターのふりをし、スレーブ ライブラリを変更することです。スレーブを欺き、スレーブの io_thread に不足している binlog をプルさせ、sql_thread に binlog イベントを並列に適用させるというアイデアです (この方法については、次のセクションで詳しく説明します)。 最適化された回復プロセス 最適化後、バックアップ回復プロセスは次のようになりました。まず、マスターの binlog を介して回復します。マスターの binlog が消去されたことが判明した場合は、binlogserver の binlog を介して回復します。これは、より科学的で合理的な回復プロセスだと思います。 さまざまな回復方法の適時性の比較 事業回復 この時点で、フル+増分バックアップのデータ復旧が完了しました。この時点で、R&Dでデータを確認する必要があります。確認後、対応するテーブルを元のマスターに復元します。よく使用される方法は次のとおりです。
要約する このセクションでは、主にバックアップとリカバリの設計プロセスを紹介します。完全なリカバリを最適化する方法がない場合、増分バックアップの方法とプロセスを最適化することで、リカバリ時間を短縮できます。説明する必要があるのは、このセクションで紹介されている内容はまだ完全にテストされておらず、すべての点が正しいことを保証できないということです。さらなる検証が必要です。検証に合格したら、お知らせし、既存のデータベース運用保守プラットフォームと組み合わせて自動回復を実現します。 最後に、いくつか注意事項があります。
上記は、MySQL バックアップとリカバリの設計アイデアの詳細な内容です。MySQL バックアップとリカバリの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Windows 10 Home Edition に Docker をインストールする方法
この記事で説明する等高レイアウトでは、純粋な CSS を使用して、要素の高さを手動で設定することなく...
よく使われる4つのMySQLエンジンの紹介(1):MyISAMストレージエンジン:トランザクションや...
<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...
[問題の説明]私たちの実稼働環境には、複数の MySQL サーバー (MySQL 5.6.21) の...
1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...
MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含...
この記事では、ショッピングカートを実装するためのJavaScriptの具体的なコードを参考までに紹介...
いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...
実験環境は以下のとおりですここでは、4 台のサーバー (1 台の nginx、負荷用の 2 台の t...
起動していたDockerコンテナはメモリを使い果たした状態になっており、再起動せずにコンテナのメモリ...
この記事では、VMware 12でのUbuntu 16.04イメージのインストールチュートリアルを参...
目次ディレクトリ構造binディレクトリconfディレクトリlibディレクトリwebapps ディレク...
問題: vue-cil3 は、`--fix` オプションで修正できる可能性のある警告とともに実行され...
解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...
手順は以下のとおりです1. dockerグループを作成する: sudo groupadd docke...