Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

01 背景

Xtrabackup は Percona が開発したオープンソースの MySQL ホットバックアップツールです。以前の仕事で頻繁に使用していましたが、まだ使用段階にとどまっていました。このツールの詳細についてはあまり調べていませんでした。今日はプロセスを注意深く見て、何かを得ました。書き留めて記録しました。間違っている点があれば、ご指摘ください。

Xtrabackup ツールは、InnoDB、XtraDB、および MyISAM テーブルをバックアップできます。Percona Server のすべてのバージョンをサポートし、MySQL および MariaDB と互換性があります。また、ストリーミング バックアップ、圧縮、暗号化、増分バックアップなどの高度な機能もサポートしています。

利点は次のとおりです。

1. InnoDB ホット バックアップを実行するためにデータベースを停止する必要はありません。50G を超えるデータをバックアップする場合は、このツールが推奨されます。

2. MySQL の増分バックアップをサポートし、ストリーミング経由で他のサーバーに転送します。

3. MySQL をバックアップしてもサーバーの負荷は増加しません。

02 はじめに

このツールには、innobackupex と xtrabackup という 2 つの主要なアプリケーションがあります。前者は Perl スクリプトで、後者は C++ バリアントのバイナリ プログラムです。後者は Innodb ストレージ エンジン以外のテーブルをバックアップできないことに注意してください。 Innobackup は xtrabackup のラッパーであり、Innodb 以外のテーブルをバックアップできます。

前述の通り、皆さんご存知かと思いますが、MySQL などのシステム データベース内のテーブルの一部のストレージ エンジンは MyISAM に基づいているため、システム ライブラリのバックアップには innobackupex が一般的に使用されていることに注意してください。

03 ワークフロー

以下では、Innobackupex と Xtrabackup のワークフローについて説明します。一部重複する部分もありますが、この 2 つは連携してバックアップ タスクを完了します。

主なワークフローは次のとおりです。

1. innobackupex が起動すると、まず xtrabackup プロセスが作成されて起動し、次に xtrabackup が innodb 関連ファイルのバックアップを完了するまで待機します。

2. xtrabackup は、InnoDB 関連ファイルをバックアップするときに、次の 2 つのスレッドを開始します。1 つは、テーブルスペースの ibd ファイルのコピーを担当する ibd コピー スレッドで、もう 1 つは、REDO ログ情報のコピーを担当する redo ログ コピー スレッドです。 redo ログ スレッドは、ibd スレッドの前に開始されます。 redo ログ スレッドは、最新のチェックポイントから redo ログをコピーします (チェックポイントについては、以前の記事で説明しました)。 コピーが完了すると、ibd スレッドが開始されます。このプロセス中、innobackupex プロセスは待機状態にあり、xtrabackup プロセスによって起動されるのを待っていることに注意してください。

3. xtrabackup が ibd のコピーを完了すると (REDO ログ スレッドがまだ動作している可能性があります)、innobackupex プロセスに通知し、待機状態になります。

4. innobackupex は通知を受信すると、バックアップ ロック、チャネル整合性ポイントを実行し、非 innodb ファイルのコピーを開始します。

5. 非 innodb ファイルがコピーされた後、innobackupex は binlog の場所の取得を開始します。

6. xtrabackup_binlog_info ファイルを作成し、そのファイルに binlog ポイント情報を書き込みます。

7. 次に、innobackupex は xtrabackup プロセスへの通知を開始し、待機状態に入ります。

8. 通知を受信すると、xtrabackup プロセスは redo ログ コピー スレッドを停止し、redo ログ コピーが完了したことを通知し、innodbbackupex にロックの解放を開始するように通知します。

9. 次に、リソースの解放、メタデータ情報のバックアップ、バックアップ ディレクトリの印刷、binlog の場所情報のバックアップ、xtrabackup_info ファイル情報の書き込みなどのいくつかの仕上げタスクがあります。

10. innobackupex プロセスは、xtrabackup プロセスが終了するまで待機してから終了します。

04 いくつかの質問

1. REDO ログをコピーする必要があるのはなぜですか?

これは、バックアップ プロセス中に ibd ファイルが変更される可能性があるため、バックアップされたファイルにダーティ データが含まれる可能性があるためです。復元時には、REDO ログを介してデータを回復する必要があります。つまり、コミットされたトランザクションを適用し、コミットされていないトランザクションをロールバックする必要があります。

2. innobackupex と xtrabackup はどのように相互作用しますか?

実際、本質は 2 つの特定のファイルを削除して作成することです。これらの 2 つのプロセスは、指定されたディレクトリに特定のファイルが含まれているかどうかを監視します。含まれている場合は動作します。含まれていない場合は動作を停止し、待機状態になります。

05 ファイルをバックアップする

通常、バックアップが完了すると、次の 7 つの重要なファイルがバックアップ ディレクトリに生成されます。

  • backup-my.cnf: このファイルには、バックアップに必要な my.cnf のオプションが含まれています。復元するときは、このファイルに依存します。
  • xtrabackup_checkpoints: バックアップの種類、バックアップのステータス情報、増分バックアップがこの情報に依存していることを記録します。
  • xtrabackup_binlog_info: このファイルには、バックアップ中のバイナリ ファイル情報とオフセット位置情報が記録されます。
  • xtrabackup_binlog_pos_innodb: このファイルには、innodb テーブルのバイナリ ファイルと場所の情報が記録されます。このファイルは、--apply-log が実行されると作成されます。
  • xtrabackup_binary: このファイルには、バックアップ プロセスで使用される xtrabackup バイナリ ファイルが記録されます。
  • xtrabackup_logfile: このファイルには、ログ適用操作に必要なデータが記録されます。ログ適用に時間がかかる場合、このファイルは非常に大きくなります。
  • xtrabackup_slave_info: このファイルはよく使用されます。マスターとスレーブの関係を確立するときに、change master ステートメントに必要な情報を記録します。

上記は、Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明の詳細な内容です。Xtrabackup を使用した MySQL バックアップの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Percona XtraBackup のインストールと使用方法のチュートリアル: MySQL のバックアップと復元
  • Xtrabackup ツール(MySQL DBA に必須のツール)を使用してバックアップと復元を行う
  • mysql xtrabackup バックアップとリカバリの実装の共有
  • xtrabackup による MySQL データベースのバックアップと復元
  • MySQLはバックアップと復元操作にxtrabackupを使用します
  • xtrabackup を使用して MySQL バックアップを実装する
  • Xtrabackup を使用して MySQL データをバックアップするためのスクリプトの作成に関するチュートリアル
  • innobackupex と xtrabackup を使用して MySQL のビッグデータをバックアップおよび復元するチュートリアル
  • Xtrabackup を使用して MySQL をバックアップおよび復元する方法

<<:  ルート権限なしでログインするためのDockerソリューション

>>:  Webデザインチュートリアル(2):模倣と盗作について

推薦する

Dockerはプロセス操作を管理するためにSupervisorを使用する

Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...

DockerでMongoDBコンテナをデプロイする方法

目次Dockerとは展開する1. イメージをプルする2. 画像を表示する3. コンテナを実行する4....

HTML で div+CSS を使用してシンプルな矢印アイコンを実装するコード

ウェブデザインでは、ウェブページを美しく見せるために矢印を装飾としてよく使用します。現在、多くのウェ...

Vue要素のバックグラウンド認証プロセスの分析

序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...

Alibaba CloudにMySQLをインストールする方法の詳細な説明

軽量のオープンソース データベースである MySQL は、エンタープライズ レベルのアプリケーション...

TinyEditorはシンプルで使いやすいHTML WYSIWYGエディタです

数日前、国産の XHTML エディタを紹介しました。今日は、有名な海外の Web デザイン ブログl...

Navicat 接続 MySQL エラーの説明分析

目次環境仮想マシンバージョンMySQL バージョン事前準備MySQLの実行ステータスを確認するルート...

初心者向けMySQLシリーズチュートリアル

目次1. 基本概念と基本コマンド1) 基本的な概念2) 基本コマンド2. SQL文の記述順序と実行順...

Dockerコンテナ終了エラーコードの手順

実行後、一部の Docker コンテナが終了することがあります。原因を調べるには、Docker コン...

Vueソースコード解析における仮想DOMの詳しい説明

なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...

Dockerはコンテナポートバインディングのローカルポートを実装します

今日、イメージを起動した後、HTTP リクエスト経由でアクセスできないという小さな問題が発生しました...

favico.ico---ウェブサイトicoアイコン設定手順

1. 正常に生成されたアイコン ファイルをダウンロードし、名前を favico.ico に変更して、...

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

選択タグ内のオプションをクリアする3つの方法

方法1コードをコピーコードは次のとおりです。 document.getElementById(&qu...