スマートスタイル TECH BLOG

データベース&クラウド技術情報

Percona Monitoring and Management 2を使用したバックアップ管理

皆様MySQLのバックアップは管理できていますでしょうか。

増え続けるMySQLクラスタと、手製のバックアップスクリプトの管理、雑然としているcrontabにお困りではありませんか?

バックアップ管理のためのOSSとしては、 AmandaBacula あたりが有名ですが、それなりにお作法が多く、またデータベースに限らない汎用的なバックアップ管理ソフトウェアですので、ちょっと多機能すぎるかな…という事もあるかもしれません。

そこで、現在テクニカルプレビュー版ではあるものの、PMM 2.18.0で実装されたBackup Managementをご紹介します。

環境の準備について

監視対象のMySQLデータベースはクライアント側にインストール済みとします。
PMM Server/Clientについては、以下を参照の上セットアップします。

https://docs.percona.com/percona-monitoring-and-management/setting-up/server/index.html
https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html

Backup Management機能を利用するにあたり、サーバ側では当該機能を有効化する必要があります。

起動時の環境変数(-e ENABLE_BACKUP_MANAGEMENT=1)でも有効化できますし、GUI(Settings/Advanced Settings)からも有効化は可能です。

フラグ

GUI

クライアントサーバでは以下の条件を満たしておく必要があります。

  1. PMM2 Clientがインストールされ、PMM Serverに登録済みであり、MySQL(or MongoDB)の監視サービスが有効化されている
  2. 以下がインストール済みであり、pmm-agentの起動ユーザの$PATHに含まれている
  3. systemdでmysql.service(or mysqld.service)が起動している
  4. サービスは –user=mysql で起動しており、OSのmysqlユーザはmysql:mysqlである
  5. datadirは/var/lib/mysqlである
  6. pmm-agentは/var/lib/mysqlのread/writeパーミッションを持つ
  7. MySQL 8.0以上の場合、pmm2-clientからMySQLへの接続ユーザにはBACKUP_ADMIN権限が必要

基本的に必要なパッケージがインストールされていれば、デフォルトで要件を満たすことができます。
ここではツールのインストールコマンドだけご紹介しておきます。

S3ストレージの準備

残念ながら、現在のところバックアップの保管先はS3オブジェクトストレージのみです。

Currently supported: MySQL database server or MongoDB replica set cluster, backing up to Amazon AWS S3 storage locations.

しかしながら、UI上ではローカルバックアップ等の内容も確認され、近い将来実装されることが期待できます。

AWS S3やAzure blob storageを利用することができますが、今回は検証ですので、ローカルにOSSのオブジェクトストレージであるminioを起動して利用します。

バックアップロケーションの登録

それではここからPMM ServerのUIでの操作になります。

ログイン後の画面の、左側のメニューバーから以下のアイコンをクリックしてBackup Managementの画面を表示します。

S3の接続情報を、PMM Serverに登録する必要があります。
まずは、「Storage Locations」タブから、「+Add」ボタンを押下し、以下のようにS3接続情報を登録します。

オンデマンドバックアップ

「Backup Inventory」タブの 「+Add」ボタンは、すぐにバックアップを取得する際に利用します。
押下すると、バックアップ情報を入力できます。

情報を入力し、「Backup」ボタンを押下するとすぐにバックアップが実行されます。

取得したバックアップはリストに表示され、Status列がSuccessとなったらバックアップ完了です。

スケジュールバックアップ

指定した間隔でバックアップを取得する事もできます。

オンデマンドと同様に対象のクライアントやバックアップ名、ロケーションを設定し、下部のメニューでは、

  • 実行スケジュール
  • バックアップ保持数(Retention)
  • バックアップが失敗した場合の自動リトライ機能、リトライ回数、間隔(Retry mode/Retry interval,seconds)

といった事を指定できます。

今回はテストですので、毎分バックアップを実行するようにして、ちゃんと世代数等が確保されるかを確認してみます。

watch コマンドでしばらくストレージ内の様子を確認していると、ちゃんと2世代分のバックアップが保持されることが確認できました。

注意点としては、バックアップ取得->削除の流れですので、瞬間的にRetention + 1の数のバックアップになります。
ストレージには余裕を持つことが必要です。

スケジュールで取得したバックアップも「Backup Inventory」タブで確認可能です。

動作が確認できたため、一旦スケジュールバックアップを停止します。

リストアの実行

取得したバックアップは任意のPMM Clientとして登録された環境にリストアすることが可能です。

バックアップは何も作成していないMySQLサーバで取得したものですので、world database をインポートして、リストア後にもとに戻るか確認してみます。

先ほどのリストアボタンを押下すると、リストア用のメニューが表示されます。
「Compatible services」を選択すると、「Service name」から任意のリストア先となるクライアントを選択することが可能です。
ただし、異なるMySQLバージョン、MySQLフォークで取得したバックアップ等の互換性はユーザが考えてリストアすることが必要です。
バックアップ名にバージョンやアーキテクチャをつけておくと便利かと思います。

リストアを実行すると、「Restore history」タブから状況を確認することができます。
StatusがSuccessになっていれば成功しているはずです。

クライアントのmysqlに戻りましょう。

worldデータベースがなくなっています。

/var/lib/mysql配下のファイルのタイムスタンプはリストア時刻になっていました。

エラーログからは、リストアのためにサービスが再起動している様子があります。

以上より、非常に簡単にリストアも完了しました。

所感

触ってみた限りでは、早くテクニカルプレビューを脱してほしい…という機能で非常に便利でした。

リストア用サーバを用意しておけば、簡単にバックアップ自体の正常性確認も行うことができます。

現在のUIから推察する限りは、本格リリース時に以下の機能の実装が期待できます。

  • MySQL/MongoDB以外のデータベース(PostgreSQL?)
  • Logical Backup(mysqldump? mysqlsh dumpInstance()? mydumper?)
  • Local Client Backup(バックアップをクライアントサーバ上に保存)
  • Local Server Backup(バックアップをPMMサーバ上に保存)
  • MySQLでのIncremental Backup(MongoDBではすでに利用可能)

改善してほしいところは以下のような点があります。

  • バックアップ対象となるdatadirのパスを任意に選択したい
  • 中規模以上の環境への対応のために優先度等細かなジョブ制御パラメータもほしい
  • xtrabackup自体のオプションを制御したい
  • MariaDB(mariabackup)への対応

PMM Serverを構築するだけで、MySQLの詳細な監視とアラート機能、バックアップ等など様々な機能が手に入ります。
※ さすがPercona社はかゆいところに手がとどく製品を作ることが上手です

バックアップスクリプトとcronの管理が辛いと感じているユーザは、導入の価値があるのではと思います。

PMMをお楽しみください!

Return Top