はじめに
Percona XtraBackup(以下、PXB)は、8.0系からバージョンの体系が変わりました。従来、PXBは「2.xx」というバージョン体系(一つ前の最新は2.4)を採用していましたが、それをPercona Server for MySQL(以下、PS)側の「8.xx」に合わせた形です。
これにより、PXBも MySQL Server (以下、MySQL)および MySQL Enterprise Backup(以下、MEB)のバージョン体系と同じになりました。
そのような中、先日 PXB8.0 の最新バージョンであるPercona XtraBackup 8.0.23-16.0 リリースされました。PS8.0の方では「8.0.23」は2021/04/09時点ではまだリリースされておりませんので、PXBが先行してMySQL側に追いついたという形になります。
製品名 | リリース日 |
---|---|
MySQL Server 8.0.23 | 2021/01/18 |
Percona Server for MySQL 8.0.23 | 未リリース |
Percona Server for MySQL 8.0.22-13 | 2020/12/14 |
MySQL Enterprise Backup 8.0.23 | 2021/01/18 |
Percona XtraBackup 8.0.23-16.0 | 2021/03/22 |
本記事では、このPXB8.0.23について取り上げたいと思います。
PXB 8.0.23のインストール
まずは手元の環境にPXB 8.0.23をインストールします。最も手軽な方法は、perconaのリポジトリからインストールすることです。
1 2 3 4 5 6 7 8 9 10 11 |
$ sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm $ sudo yum install percona-xtrabackup-80-8.0.23 $ xtrabackup --version xtrabackup version 8.0.23-16 based on MySQL server 8.0.23 Linux (x86_64) (revision id: 934bc8f) ### 一緒に最新のPSライブラリもインストールしておきます $ sudo yum install percona-server-shared ### バックアップ保存先ディレクトリも作成しておく $ sudo mkdir -p /data/backups |
また、この後の検証で使用するテストデータもダウンロードしておきます。
PXB 8.0.23の使い方
PXBで実行できるバックアップの種類について簡単に説明します。詳細については公式リファレンスマニュアルを参照してください。
フルバックアップ
データベース全体を対象としたバックアップです。最も基本的なバックアップであり、細かなバックアップ要件がなければこの方法で問題ありません。
1 2 3 4 5 6 7 |
$ xtrabackup --backup --target-dir=/data/backups/ --user=root --password ### バックアップ完了後、処理中の更新を適用する $ xtrabackup --prepare --target-dir=/data/backups/ ### リストア $ xtrabackup --copy-back --target-dir=/data/backups/ |
※ –compressオプションを使えば、バックアップファイルを圧縮できます(追加でqpress
パッケージが必要です)
増分バックアップ
トランザクションログの”LSN“を利用して、基準となるフルバックアップから増減した更新分のみをバックアップします。
データサイズが大きすぎて、毎回フルバックを取ることがコストとなるような環境に有効です。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ xtrabackup --backup --target-dir=/data/backups/inc1 \ --incremental-basedir=/data/backups/base --user=root --password ### 増分バックアップを基準とした増分バックアップも可能です $ xtrabackup --backup --target-dir=/data/backups/inc2 \ --incremental-basedir=/data/backups/inc1 --user=root --password ### 基準となったバックアップに増分バックアップを適用 $ xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base \ --incremental-dir=/data/backups/inc1 ### リストアはフルバックアップと同様です $ xtrabackup --copy-back --target-dir=/data/backups/base |
部分バックアップ
–databases / –tablesオプションを利用することで、一部のデータベース、または一部のテーブルのみを対象としてバックアップを取得することができます。
1 2 3 4 5 6 7 |
### データベースはスペース区切りで指定 $ xtrabackup --backup --target-dir=/data/backups/ --user=root --password \ --databases='mysql test d1 employees' ### テーブルを指定する場合はデータベース名も含む(正規表現も使える) $ xtrabackup --backup --target-dir=/data/backups/ --user=root --password \ --tables=="^test[.]t10*" |
なお、部分バックアップのリストアは通常のMySQL機能である「ALTER TABLE … DISCARD/IMPORT TABLESPACE」を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
### .cfg / .ibdファイルを生成 $ xtrabackup --prepare --export --target-dir=/data/backups/ ### リストアしたいテーブルを作成し、テーブルスペースを破棄 mysql> CREATE TABLE d1.t1 (id int, col1 text); mysql> ALTER TABLE d1.t1 DISCARD TABLESPACE; ### .cfg / .ibdファイルをデータディレクトリに配置 $ cp /data/backups/d1/t1.{ibd,cfg} /var/lib/mysql/d1/ $ chown mysql:mysql /var/lib/mysql/d1/t1.{ibd,cfg} ### `IMPORT TABLESPACE`でテーブルをリストア mysql> ALTER TABLE d1.t1 IMPORT TABLESPACE; |
動作対象のソフトウェア/バージョン
まずは、PXB8.0.23が動作するソフトウェア、およびバージョンを確認します。dbdeployerを用いて用意したサンドボックス環境に対して実行して試してみましょう。
MySQL
8.0系
まずはMySQL8.0の最新版である 8.0.23 に対して実行してみます。
1 2 3 4 5 6 7 8 |
$ dbdeployer deploy single 8.0.23 $ sandboxes/msb_8_0_23/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=8023 --default-file=sandboxes/msb_8_0_23/my.sandbox.cnf ... 210413 10:46:39 version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;host=127.0.0.1;port=8023' as 'root' (using password: YES). ... 210413 10:46:53 completed OK! |
問題なくフルバックアップが実行できました。次に、一つ前のバージョンである8.0.22に対して実行してみましょう。
1 2 3 4 5 6 7 8 9 |
$ sudo rm -rf /data/backups/* $ dbdeployer deploy single 8.0.22 $ sandboxes/msb_8_0_22/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=8022 ... 210413 11:23:56 version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;host=127.0.0.1;port=8022' as 'root' (using password: YES). ... 210413 11:24:07 completed OK! |
こちらも問題なく実行できました。PXBでは対応するバージョンよりも古いMySQLであっても動作するようです。
ちなみに、PXB 8.0.22 を MySQL 8.0.23 に対して実行した場合は以下のようなエラーになります。PXBよりも新しいバージョンのMySQLを対象とした場合は、ツールが動作しないことがある点に注意が必要です。
※ –no-server-version-checkオプションを使えば無理やり動かせますが、推奨はできません
1 2 3 4 |
$ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=8023 ... Error: Unsupported server version 8.0.23. Please upgrade PXB, if a new version is available. To continue with risk, use the option --no-server-version-check. |
5.7系
次にMySQL5.7で PXB 8.0.23 が動作するか確認します。最新バージョンの 5.7.32 に対して実行してみましょう。
1 2 3 4 5 6 7 8 9 |
$ sudo rm -rf /data/backups/* $ dbdeployer deploy single 5.7.32 $ sandboxes/msb_5_7_32/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=5732 ... Error: Unsupported server version: '5.7.32'. This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0 Please use Percona XtraBackup 2.4 for this database. |
こちらも残念ながらエラーとなってしまいました。PXB8.0は、8.0系を意識して設計されたものであり、以前のメジャーバージョン(~5.7系)では動作しません。そのため、PXB2.4を使用する必要があります。
Percona Server
PS8.0 および PS 5.7 でもPXB8.0.23の動作を確認してみました。結論として、MySQLと同じく 8.0 ではバックアップは正常に動きますが、5.7系はサポート対象外になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sudo rm -rf /data/backups/* $ dbdeployer deploy single ps_8.0.22 $ sandboxes/msb_ps_8_0_22/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=8022 ... 210414 12:09:46 completed OK! $ sudo rm -rf /data/backups/* $ dbdeployer deploy single ps_5.7.33 $ sandboxes/msb_ps_5_7_33/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=5733 ... Error: Unsupported server version: '5.7.33-36'. This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0 Please use Percona XtraBackup 2.4 for this database. |
MariaDB
最後にMariaDBでも動作を確認してみましょう。MariaDB 10.5 / 10.4 系の最新版にて試してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ sudo rm -rf /data/backups/* $ dbdeployer deploy single 10.4.18 $ sandboxes/msb_10_4_18/use < employees.sql $ dbdeployer deploy single 10.5.9 $ sandboxes/msb_10_5_9/use < employees.sql $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=10418 Error: Unsupported server version: '10.4.18-MariaDB'. This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0 Please use Percona XtraBackup 2.4 for this database. $ sudo xtrabackup --backup --target-dir=/data/backups/ --user=root --password --host=127.0.0.1 --port=10509 ... Error: Unsupported server version: '10.5.9-MariaDB'. This version of Percona XtraBackup can only perform backups and restores against MySQL 8.0 and Percona Server 8.0 Please use Percona XtraBackup 2.4 for this database. |
残念ながら、MariaDBのバージョン体系ではPXBのバージョンチェックに引っかかってしまい、実行はできませんでした。MariaDBでは専用の「mariabackup」が用意されていますので、こちらをご利用ください。
さいごに
今回、最新のPXB8.0.23がどの製品、どのバージョンで動作するのかを確認しました。
PXBはとても便利な物理バックアップツールですが、利用できる(サポートされている)バージョンを十分確認したうえでご利用ください。