時点に基づくMySQLクイックリカバリソリューション

時点に基づくMySQLクイックリカバリソリューション

なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テーブル内のデータを復元する要求が出たからです。 当時の状況を聞いてみると、大体次のような感じでした。業務側が誤ってテーブル内で更新操作を実行しました。 where 条件が正しく記述されていなかったため、テーブル内のデータが破損していました。 ただし、データはまだディスクに書き込まれておらず、メモリ内の値のみが変更されており、以前のデータに復元する必要があります。幸いなことに、このデータはプラットフォーム上の特定の商品の価格です。基本的に、商品の数は限られており、価格の値はすべて固定されています。この価格表は以前にバックアップされていたため、新しい価格表のコピーのデータが直接インポートされ、この問題が解決されました。

その時、バックアップがなく、binlog しかない場合、この問題を回復する必要があるとしたら、もっと良い方法はないだろうかと考えていました。新しいインスタンスを作成し、データベース全体を復元してから、バックアップされたバイナリログを適用し、データが破損した時点まで遡ります。

トランザクションを再生するには、mysqlbinlog ツールを使用します。この方法には、次のような多くの落とし穴があります。

1. 一度に 1 つの binlog ファイルを再生するには、一度に 1 つの mysqlbinlog コマンドのみ実行できます。再生時に一時テーブルが生成され、競合や障害が発生するため、複数のコマンドを並行して実行することはできません。

2. これはアトミック操作です。実行の途中で失敗した場合、どこで失敗したかを把握し、以前の時点から再開することが困難になります。失敗の理由は多数あります。同時トランザクションによる Innodb ロック待機タイムアウト、サーバーとクライアントの max_allowed_pa​​cket 設定の違い、クエリ中の MySQL サーバーとの接続の喪失などです。

そこで、Percona さんのブログをパラパラと見て、方法を見つけ、エッセンスを読んで、ざっくりと記録しました。この方法はまだ自分では実装していませんが、ここに記録しておきました。今後時間ができたら、自分で試して、この問題をより効率的に解決できるかどうか確認してみます。

一般的な考え方は次のとおりです。

2 台の追加のマシン。1 台目はバックアップ結果データを復元するために使用され、もう 1 台は元のマスターの binlog をインスタンスにコピーして元のマスターをシミュレートするために使用されます。次に、1 台目のマシンと 2 台目のマシンはマスターとスレーブの関係を確立し、マスターを 2 台目のマシンに変更し、バックアップ結果 (xtrabackup_binlog_info の binlog 名と pos) を配置し、エラー操作ポイントに同期し、復元されたテーブルをエクスポートして、本番の元のマスターに復元します。

具体的な手順は次のとおりです。

1. インスタンスの最新のバックアップ結果データをバックアップおよび復元するためのマシンを準備します。

2. 別のマシン (新しいインスタンス) を準備し、元のマスターの binlog ファイルをインスタンスのデータ ディレクトリにコピーし、空のインスタンスを起動します (server-id は元のマスターと同じ、--log_bin=master-bin binlog ファイル名は元のマスターと同じままです)。次に、インスタンスを停止し、自動的に作成されたすべての binlog を削除し、必要なすべての binlog (元の運用インスタンスから) を解凍してデータ ディレクトリにコピーし、再起動します。

最新のバックアップデータの場所:

起動が正常であれば、MySQL に接続して binlog 関連情報を表示します。

3. 同期関係を確立し、誤った操作の位置の前で停止する

 マスターを変更 

MASTER_HOST='127.0.0.1',

マスターポート=3307、

MASTER_USER='root'、

MASTER_PASSWORD='秘密',

MASTER_LOG_FILE='master-bin.000007'、MASTER_LOG_POS=1518932;

スレーブを開始するまで 

MASTER_LOG_FILE = 'ログ名'、 

MASTER_LOG_POS = ログ位置

または

スレーブSQL_THREADを開始する

 SQL_AFTER_GTIDS =

 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56

スレーブステータスを表示します。

これは、インスタンスを 1 つ追加するのと同じであり、バイナリ ログの使用率とバイナリ ログの使用成功率が向上します。この方法が実行可能かどうかはまだ検証されていません。記事で著者が説明したアイデアによると、この方法は、binlog を単一のインスタンスに適用する方法よりも優れています。binlog を適用するプロセスでエラーが発生すると、エラーが発生したポイントをすぐに特定できるため、問題を迅速に解決するのに役立ちます。

上記は、MySQL の時間ベースのクイックリカバリソリューションの詳細です。MySQL クイックリカバリの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLの論理アーキテクチャに関する深い理解
  • MYSQLストアドプロシージャ、つまり一般的な論理知識のポイントの要約
  • MySQL 上級学習ノート (パート 3): MySQL 論理アーキテクチャの紹介、MySQL ストレージ エンジンの詳細な説明
  • MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します
  • Mysql論理アーキテクチャの詳細な説明
  • MySQLで論理SQLを置き換える際の落とし穴を回避する方法の詳細な説明
  • PHPを使用してMySqlデータベースにアクセスする論理操作と追加、削除、変更、チェックの例
  • MySql ストアド プロシージャの論理的判断と条件制御
  • MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します
  • MySQLはデータ復旧を実装するためにbinlogログを使用する
  • MySQL5.7 mysqldump バックアップとリカバリの実装
  • MySQL 論理バックアップとリカバリ テストの概要

<<:  Nginx リバースプロキシの例の詳細な説明

>>:  Tomcatc3p0 で jnid データ ソースを構成する 2 つの実装方法の分析

推薦する

Vueプロジェクトでのトークン検証ログイン(フロントエンド部分)

この記事の例では、Vueプロジェクトでのトークン検証ログインの具体的なコードを参考までに共有していま...

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

EasyUEFI を使用して Windows 10 で USB ドライブなしで Ubuntu 18 をインストールする

1. BIOSを確認するまず、コンピュータの起動モードを確認します。win+R と入力し、msinf...

Linux でバックグラウンド タスクを実行するために nohup と screen を使用する例と違いの簡単な分析

SSH ターミナル (putty、xshell など) を使用して Linux サーバーに接続し、時...

React refの使用例

目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...

CSS3アニメーション属性に基づくWeChatタップアニメーション効果の実装

最近人気のWeChatタップ機能を見て、CSS3アニメーションを見直し、このボックスシェイクアニメー...

mysql update文の実行プロセスの詳細な説明

以前、MySQL クエリ文の実行プロセスについての記事がありました。ここでは、更新文の実行プロセスを...

JavaScript のスプレッド演算子とレスト演算子の違いの詳細な説明

目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...

docker公式mysqlイメージのカスタム構成の詳細な説明

インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...

HTML テーブルの空白セル補完を実装する方法

私が初めて Web 開発を独学で学んだ頃は、いわゆる DIV/CSS レイアウトはなく、テーブル レ...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

MySQLはデータテーブル内の既存のテーブルを分割します

目次操作方法操作プロセス既存のテーブルにパーティション テーブルを作成し、データを新しいテーブルに移...

MySQL 8.0.26 のインストールとアンインストールの完全なステップバイステップの記録

目次序文1. インストール1.公式サイトからダウンロード2. 構成を作成する3. MySQLを初期化...

10分でDockerを使ったマイクロサービスのデプロイ方法を学ぶ

Docker は 2013 年のリリース以来、広く注目され、ソフトウェア業界を変える可能性を秘めてい...

CentOS7 システムでスワップを増やす方法の例

序文スワップは、ディスク上にある「仮想メモリ」の一部である特殊なファイル (またはパーティション) ...