Percona XtraBackup REDOログのアーカイブ機能について

目次

はじめに

MySQL8.0.17 新機能紹介:Redo ログのアーカイブについて – スマートスタイル技術ブログ

ただし、現時点でこの機能に対応しているのは MySQL Enterprise Backup のみであるため、Percona XtraBackup や MariaDB Enterprise Backup ではまだ使用することができない点には注意してください。

既に弊社ブログでMySQL8.0.17の新機能、REDOログのアーカイブについては紹介したところではありますが、Percona XtraBackupが対応しましたので、そちらの方を紹介する記事になります。また、Percona XtraBackup 8.0.34-29で追加された–-redo-log-arch-dirオプションについても紹介させていただきます。
 
以下、Percona XtraBackup公式ドキュメントを参考にしています。

InnoDB redo log archiving – Percona XtraBackup
 
二種類の方法が提示されていますので、それぞれ検証してみます。

  1. MySQLでアーカイブディレクトリを設定する場合
  2. MySQLでアーカイブディレクトリを設定しない場合(8.0.34-29以降)

検証環境

※執筆時点で最新の安定版リリースを使用しています。

事前準備

Percona XtraBackupのインストール

Perconaの Software Downloadsサイト より、ダウンロード後、インストールします。

バックアップ先ディレクトリ作成

バックアップ先ディレクトリを作成します。

バックアップ用ユーザ作成

バックアップ用ユーザを作成し、必要な権限付与をしていきます。
権限付与は以下公式ドキュメントを参考にしています。

Connection and privileges needed – Percona XtraBackup

–-redo-log-arch-dirオプションを使用する場合、かつ innodb_redo_log_archive_dirsが設定されていない場合にSUPER権限またはSYSTEM_VARIABLES_ADMIN権限が必要です。詳細は後述します。

 
INNODB_REDO_LOG_ARCHIVE権限を付与します。

 
※ちなみに、INNODB_REDO_LOG_ARCHIVE権限がないとバックアップ実行時に以下のエラーになります。

アーカイブディレクトリ作成

REDOログ用のアーカイブディレクトリを作成します。

 
※事前に作成しない場合、Percona XtraBackupでバックアップ実行時に自動的に作成してくれますが、mysqlユーザにアクセス権限がない場所(/var/lib等)を親ディレクトリに指定していると以下のエラーになります。そのため事前に作成しておくのが好ましいです。

 
※datadirの中にアーカイブディレクトリを作成してしまうと以下のエラーになりました。
Percona XtraBackupはdatadir自体をバックアップするので、中にあると不都合らしいです。

1.MySQLでアーカイブディレクトリを設定する場合

MySQLシステム変数の設定

MySQLのinnodb_redo_log_archive_dirsシステム変数を設定します。

The innodb_redo_log_archive_dirs global variable contains labeled directories. The format is label:directory-path.
mysql> SET PERSIST innodb_redo_log_archive_dirs=’backup1:/var/lib/mysql-redo-archive/’;

innodb_redo_log_archive_dirs グローバル変数には、ラベル付きディレクトリが含まれています。 形式はラベル:ディレクトリパスです。

InnoDB redo log archiving – Percona XtraBackup

 

※ラベルには任意の名前を指定します。指定しないこともできますが最初の:(コロン)は必要です。例:':/var/lib/mysql-redo-archive'

The label is an arbitrary identifier for the archive directory. It can be any string of characters, with the exception of colons (:), which are not permitted. An empty label is also permitted, but the colon (:) is still required in this case.

ラベルは、アーカイブ ディレクトリの任意の識別子です。 許可されないコロン (:) を除き、任意の文字列を使用できます。 空のラベルも許可されますが、この場合もコロン (:) が必要です。

MySQL :: MySQL 8.0 Reference Manual :: 17.6.5 Redo Log

 
※ディレクトリ名の指定について、公式ドキュメント通りにbackup1:/var/lib/mysql-redo-archive/のように末尾にスラッシュを入れても一応エラーにはなりませんが、ログを見るとスラッシュが二重になっています。

バックアップ実行

バックアップはmysqldプロセス実行OSユーザ(デフォルトはmysql)で実行します。
※公式ドキュメントでは–-redo-log-arch-dirオプションを使用した場合しか書かれていませんが、MySQLシステム変数を使用した場合もこの制限を受けます。

redo-log-arch-dir (…) To use this option, you must run Percona XtraBackup as the same owner as mysqld.

redo-log-arch-dir (…) このオプションを使用するには、mysqld と同じ所有者として Percona XtraBackup を実行する必要があります。

InnoDB redo log archiving – Percona XtraBackup

 
※rootユーザ等で実行すると以下のエラーになります。

 
suコマンド等でmysqlユーザにログインして、
バックアップを実行します。

 
以下のようなログが出ていればアーカイブ機能が使用できています。

尚、ログ内に書かれている一時ディレクトリと一時ファイル1713498738935/archive.640767e5-d12a-11ee-8fe9-0242ac110002.000001.logについては、すぐに削除される仕様ですので、lsコマンド等で確認できませんでした。

2.MySQLでアーカイブディレクトリを設定しない場合

MySQLのinnodb_redo_log_archive_dirsシステム変数を設定せずに、Percona XtraBackup 8.0.34-29から追加されたオプションである--redo-log-arch-dirを使用してみます。

Percona XtraBackup 8.0.34-29 added the redo-log-arch-dir option. If the archiving directory is not configured in MySQL, Percona XtraBackup creates a temporary directory for the archive file.

Percona XtraBackup 8.0.34-29 では、redo-log-arch-dirオプションが追加されました。 MySQL でアーカイブ ディレクトリが構成されていない場合、Percona XtraBackup はアーカイブ ファイル用の一時ディレクトリを作成します。

InnoDB redo log archiving – Percona XtraBackup

 

MySQL側に変数は設定されていません。

–-redo-log-arch-dirオプションについて

–-redo-log-arch-dirオプションを使用する場合、内部的にSET文を実行する仕様のため、バックアップ用ユーザにSUPER権限またはSYSTEM_VARIABLES_ADMIN権限が必要です。

 
--redo-log-arch-dirオプションには、'backup1:/var/lib/mysql-redo-archive'のようにinnodb_redo_log_archive_dirsシステム変数と同様の形式で設定します。バックアップ実行時に内部的にSET文が実行される仕様のためです。

※正しい形式で指定しなかった場合、以下のエラーになります。

バックアップ実行

バックアップはmysqldプロセス実行OSユーザ(デフォルトはmysql)で実行します。
suコマンド等でmysqlユーザにログインして、
バックアップを実行します。

 
以下のようなログが出ていればアーカイブ機能が使用できています。

 
バックアップ取得後もMySQL側に変数は設定されていません。

補足

MySQLとPercona XtraBackupの両方で設定した場合どうなるか?

以下、公式ドキュメントにも文言がありますが、MySQL側で構成されていないときのみPercona XtraBackup側のオプションが有効となります。

If the archiving directory is not configured in MySQL, Percona XtraBackup creates a temporary directory for the archive file.

MySQL でアーカイブ ディレクトリが構成されていない場合、Percona XtraBackup はアーカイブ ファイル用の一時ディレクトリを作成します。

InnoDB redo log archiving – Percona XtraBackup

そのため、MySQLのinnodb_redo_log_archive_dirsシステム変数が優先されて、Percona XtraBackupの--redo-log-arch-dirオプションは無視されます。

公式ドキュメントについて

公式ドキュメントに以下のようなSELECT文が書かれており、バックアップ取得前に手動実行するコマンドなのか?と勘違いしそうですが、Percona XtraBackupでバックアップ実行時に内部的に実行されるコマンドなので、基本的に手動実行する意味はありません。

InnoDB redo log archiving – Percona XtraBackup

また、手動実行の詳細については、弊社ブログ(MySQL8.0.17 新機能紹介:Redo ログのアーカイブについて – スマートスタイル技術ブログ)内で紹介していますので興味がある方は是非読んでみてください。

まとめ

REDOログのアーカイブ機能を使用することで、バックアップ実行中のMySQL サーバーのアクティビティ(REDOログの大量生成や、REDOログのI/O遅延等)を気にする必要がなくなります。

また、Percona XtraBackup 8.0.34-29で追加された–-redo-log-arch-dirオプションを使用すればMySQLのシステム変数を設定することなく気軽にアーカイブ機能を使用することができます。

是非導入を検討してみてください。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃オープンソースデータベースのサポート業務に従事している有資格者で構成された技術サポートチームがPerconaに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次