harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

backup DB infra MySQL restore

[MySQL] ZRM(Zmanda Recovery Manager) を試してみる

投稿日:2013年9月30日

Last Updated on 2021年7月4日 by かんりにん

お客さんのWebサイトで運用しているMySQLにて、ここんとこmysqldump実行時にエラーが出るように。
レプリケーションにてスレーブ2ホストで同期しているので、ダンプのエラー自体は緊急性は高くないものの、原因を特定するのに長くかかりそう…(たぶんいくつかのテーブルの掃除をすれば直る感じ)。
ひとまず時間があるときに原因を探りつつ、mysqldumpの代わりになりそうなツールということで”Zmanda Recovery Manager / ZRM”を試してみることに。

▼参考:お世話になっております。
Amanda: Open Source Backup(公式サイト)
Zmanda Recovery Manager(英語版)
Zmanda Recovery Manager(日本語版)
Zmanda wiki(Wiki)
download-ZRM(ダウンロードページ)

■概要

ツールの関係性がややこしくて分かりにくかったので、いったん整理してみた。

1)amanda
OSSバックアップツール、イメージとしてはBackup ExecやNetVaultみたいなツールと同じ位置づけ。yumでインストール可能。

2)Zmanda
amanda、ZRMの開発を含めた開発会社

3)Zmanda Recovery Manager for MySQL (略してZRM)
オープンソースのmysqlバックアップ、リカバリツール。community版とenterprise版とある。
一部でamandaのライブラリを使っている様子?
詳しくはこちら

mysqldumpやレプリケーション、InnoDBHotBackupに代わるツールを探していたので期待したが
公式サイトには”Backups are done via mysqldump, various snapshots, mysqlhotcopy or MySQL replication.”とのこと。
結局ベースとなるツールがあり、mysqldumpやmysqlhotcopy、LVMを利用したユーティリティ的なもの、という印象…とはいえ、せっかくなので、一通り試してみることに。
(結局本番環境のバックアップには、以前試したPercona-XtraBackupを採用する方向に…)

■導入検証ログ

▼パッケージ/ソースのダウンロード。

1)amanda

CentOS6ではyumのbaseリポジトリからインストール可能。

# yum install amanda amanda-server amanda-devel amanda-client

公式サイトだと最新の3.3.4をダウンロードできる様子ながら、yumから入れたら3.0.1だった。
ひとまず2.6.1のまま進めてみる(特に問題なかった)。

2)MySQL-ZRM

RPMパッケージでは、以下の2種類が用意されている。

MySQL-zrm-3.0-1.noarch.rpm
サーバー用途の標準パッケージ。
MySQL-zrm-client-3.0-1.noarch.rpm
上記のMySQL-zrmから一部のプラグインやライブラリをピックアップしたもの。
MySQL-zrmにすべて含まれているので、MySQL-zrmをインストールする場合は不要。

公式サイトでは最新版は2013年8月の3.0.1なので、これを使用。

# wget http://www.zmanda.com/downloads/community/ZRM-MySQL/3.0/RPM/MySQL-zrm-3.0-1.noarch.rpm
# wget http://www.zmanda.com/downloads/community/ZRM-MySQL/3.0/RPM/MySQL-zrm-client-3.0-1.noarch.rpm

※直接rpm -ivhしてもいいが、いったんダウンロードしてからインストール。

# rpm -ivh --test MySQL-zrm-3.0-1.noarch.rpm MySQL-zrm-client-3.0-1.noarch.rpm
error: Failed dependencies:
       perl(XML::Parser) is needed by MySQL-zrm-3.0-1.noarch

→perlのモジュール”XML::Parser”が足りてなかったのでインストール。
CPANでもRPMでもどちらでもいいが、RPMで入れる場合は”perl-XML-Parser”で。

# yum install perl-XML-Parser

– perl-XML-Parserインストール後、再度MySQL-zrmをインストール。

# rpm -ivh --test MySQL-zrm-3.0-1.noarch.rpm
Preparing...                ########################################### [100%]
# rpm -ivh MySQL-zrm-3.0-1.noarch.rpm
Preparing...                ########################################### [100%]
   MySQL-zrm                ########################################### [ 50%]

▼設定

ZRMのバックアップは、”バックアップセット”という単位で設定するとのこと。

設定ファイル:/etc/mysql-zrm以下に配置。

1)グローバルコンフィグ

デフォルトの設定ファイルは以下の二つ。
mysql-zrm.conf
mysql-zrm-reporter.conf
 

2)オプション:バックアップセット

バックアップセットを作成する場合は/etc/mysql-zrm以下にバックアップセット用ディレクトリ作成し、/etc/mysql-zrm/mysql-zrm.conf をコピーして使用する。
 

3)バックアップセットを設定したコンフィグ例

今回はお試しなので、/etc/mysql-zrm以下にtest-backup/を作成し、バックアップセットのコンフィグを用意。

1.mysql-zrm.conf(グローバルコンフィグ)
backup-level=0						←"0"を指定でフルバックアップ。
backup-mode=logical					←"logical"を指定するとmysqldumpでのバックアップを実行。
destination=/var/lib/mysql-zrm		←バックアップファイルの出力先(destination)
2./etc/mysql-zrm/test-backup/mysql-zrm.conf(バックアップセット)
databases=TESTDB					←バックアップ対象のDBスキーマ
user="backupuser"					←DB接続ユーザー
password="backupPASS"				←DB接続ユーザーのパスワード
host="localhost"					←バックアップ対象DBの指定
port=3306							←MySQL接続ポート
socket=/var/lib/mysql/mysql.sock	←MySQLサーバーのソケットを指定
single-transaction=0				←single-transaction有無の指定、"0"でsingle-transaction無し(テーブルをロックする)

 

▼実行してみた

環境はCentOS6.4、MySQLはRPM版の5.1.73でお試し。

1.コンフィグの書式チェック

# mysql-zrm-check --backup-set=test-backup
check:INFO: ZRM for MySQL Community Edition - version 3.0
test-backup:check:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular'
test-backup:check:INFO: Configuration check successful

→特に問題ない様子。

2.バックアップ実行

– コマンド”mysql-zrm-backup”での実行例

# mysql-zrm-backup --backup-set=test-backup
backup:INFO: ZRM for MySQL Community Edition - version 3.0
test-backup:backup:INFO: START OF BACKUP
test-backup:backup:INFO: PHASE START: Initialization
test-backup:backup:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular'
test-backup:backup:INFO: backup-set=test-backup
test-backup:backup:INFO: backup-date=20130929152110
test-backup:backup:INFO: mysql-server-os=Linux/Unix
test-backup:backup:INFO: backup-type=regular
test-backup:backup:INFO: host=localhost
test-backup:backup:INFO: backup-date-epoch=1454912470
test-backup:backup:INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 3.0
test-backup:backup:INFO: mysql-version=5.1.73-log
test-backup:backup:INFO: backup-directory=/var/lib/mysql-zrm/test-backup/20130929152110
test-backup:backup:INFO: backup-level=0
test-backup:backup:INFO: backup-mode=logical
test-backup:backup:INFO: PHASE END: Initialization
test-backup:backup:INFO: PHASE START: Running pre backup plugin
test-backup:backup:INFO: PHASE END: Running pre backup plugin
test-backup:backup:INFO: PHASE START: Flushing logs
test-backup:backup:INFO: PHASE END: Flushing logs
test-backup:backup:INFO: PHASE START: Creating logical backup
test-backup:backup:INFO: logical-databases=TESTDB
logical-parallel=0
test-backup:backup:INFO: PHASE END: Creating logical backup
test-backup:backup:INFO: PHASE START: Calculating backup size & checksums
test-backup:backup:INFO: next-binlog=mysql-bin.000003
test-backup:backup:INFO: backup-size=0.45 MB
test-backup:backup:INFO: PHASE END: Calculating backup size & checksums
test-backup:backup:INFO: read-locks-time=00:00:00
test-backup:backup:INFO: flush-logs-time=00:00:00
test-backup:backup:INFO: backup-time=00:00:00
test-backup:backup:INFO: backup-status=Backup succeeded
test-backup:backup:INFO: Backup succeeded
test-backup:backup:INFO: PHASE START: Running post backup plugin
test-backup:backup:INFO: PHASE END: Running post backup plugin
test-backup:backup:INFO: PHASE START: Cleanup
test-backup:backup:INFO: PHASE END: Cleanup
test-backup:backup:INFO: END OF BACKUP

→”Backup succeeded”を確認。成功。

– 実行後に作成されたバックアップファイルを確認
mysql-zrm.confにて指定したdestination”/var/lib/mysql-zrm”以下に
バックアップセット名”test-backup”でディレクトリが作成され、実行日時を反映したサブディレクトリ以下にバックアップファイルが出力される。

# ll /var/lib/mysql-zrm/test-backup/20130929152110
total 476
-rw-r--r-- 1 root root 472820 Sep 27 15:21 backup.sql
-rw-r--r-- 1 root root    506 Sep 27 15:21 index
-rw-r--r-- 1 root root    153 Sep 27 15:21 zrm_checksum
#

また実行後、バックアップセットのディレクトリ直下に”last_backup”ファイルが作成され、最後に実行された際の、ファイル出力先ディレクトリが記載されている。

3.出力したバックアップファイルのチェック

コマンド”mysql-zrm-reporter”にてバックアップセットを指定し、各種ステータスを確認する。
“–show”にてバックアップに関する各種情報を、”–where”でバックアップセットなどを指定(–backup-setでの指定ではないので注意)
以下はバックアップを数回試行したのち、”backup-status-info”を指定して実行した例。

# mysql-zrm-reporter --show backup-status-info --where backup-set=test-backup
reporter:ERROR: Missing file /var/lib/mysql-zrm/test-backup/20130929151357/index, can not parse this index file

REPORT TYPE : backup-status-info

 backup_set  backup_date                  backup_level  backup_status         backup_type       comment
-----------------------------------------------------------------------------------------------------------------------------
test-backup  Mon Sep 27 18:07:45 2013                0  Backup succeeded      regular           ----
test-backup  Mon Sep 27 18:00:03 2013                0  Backup succeeded      regular           ----
test-backup  Mon Sep 27 17:35:29 2013                0  Backup succeeded      regular           ----
test-backup  Mon Sep 27 17:33:53 2013                0  Backup succeeded      regular           ----
test-backup  Mon Sep 27 17:21:10 2013                0  Backup succeeded      regular           ----

 

4.バックアップしたファイルの検証

コマンド”mysql-zrm-verify-backup”にて正常性の検証が可能。
ここではバックアップセットの指定に加え、複数あるバックアップファイルのうち、検証したいバックアップファイルのディレクトリを”–source-directory”で指定する。バックアップセットだけの指定だとエラーになるので要注意。

# mysql-zrm-verify-backup --backup-set test-backup --source-directory /var/lib/mysql-zrm/test-backup/20130929173353/
verify-backup:INFO: ZRM for MySQL Community Edition - version 3.0
test-backup:verify-backup:INFO: Verification successful

 

▼リストアを試してみる

1.テストのため既存のデータベーススキーマを削除

# mysql -uroot -p
Enter password:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| wordpress          |
+--------------------+
3 rows in set (0.00 sec)

mysql> drop database wordpress;
Query OK, 11 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
+--------------------+
2 rows in set (0.00 sec)

mysql>

 

2.リストア対象ファイルの確認

mysql-zrm-reporterのオプション”restore-info”にて、リストア対象となりうるファイルを確認。

# mysql-zrm-reporter --show restore-info --where backup-set=test-backup

REPORT TYPE : restore-info

 backup_set  backup_date                  backup_level  backup_directory                          backup_status         comment
-----------------------------------------------------------------------------------------------------------------------------------------------------
test-backup  Mon Sep 27 18:07:45 2013                0  /var/lib/mysql-zrm/test-backup/201309291  Backup succeeded      ----
                                                        80745
test-backup  Mon Sep 27 18:07:03 2013                0  /var/lib/mysql-zrm/test-backup/201309291  Backup succeeded      ----
                                                        80703
test-backup  Mon Sep 27 17:35:29 2013                0  /var/lib/mysql-zrm/test-backup/201309291  Backup succeeded      ----
                                                        73529
test-backup  Mon Sep 27 17:33:53 2013                0  /var/lib/mysql-zrm/test-backup/201309291  Backup succeeded      ----
                                                        73353
test-backup  Mon Sep 27 15:21:10 2013                0  /var/lib/mysql-zrm/test-backup/201309291  Backup succeeded      ----
                                                        52110

実行結果のうち、backup_dateのもっとも最新の”/var/lib/mysql-zrm/test-backup/20130929180745″以下のファイルを用いてリストアを試行してみる。
 

3.リストア実行

# mysql-zrm-restore --backup-set=test-backup --source-directory=/var/lib/mysql-zrm/test-backup/20130929180745
restore:INFO: ZRM for MySQL Community Edition - version 3.0
test-backup:restore:INFO: The quick backup-type is supported only for snapshot backups. Setting backup-type to 'regular'
test-backup:restore:INFO: Restored database(s) from logical backup:  wordpress
test-backup:restore:INFO: Restore done in 0 seconds.

上記にてリストア成功。
 

4.リストアされたデータベースの確認

# mysql -uroot -p
	
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| wordpress          |
+--------------------+
3 rows in set (0.00 sec)
		
mysql> show tables;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
11 rows in set (0.00 sec)

mysql>

以上、バックアップからリストアまでの簡単な流れをトレース。
今回は仮想マシンを使っていろいろ試してみただけなので、LVMを利用したスナップショットのバックアップなどはまた別の機会に。
 

▼メール通知オプション

mysql-zrm.confにて”mailto”にて宛先を指定した際、ジョブやコマンド実行時に宛先へメールが配信される。
以下はmysql-zrm-backup実行時のメールを記載。

Subject: [ZRM for MySQL Report] backup-set test-backup
本文   : Backup set=test-backup
	 Backup date=Mon Sep 27 18:07:45 2013
	 Backup level=0
	 Logical Databases=wordpress
	 Backup size=0.45 MB
	 Backup time=00:00:00
	 Backup status=Backup succeeded

 

 

 

-backup, DB, infra, MySQL, restore
-,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

nagiosgraph​/4.グラフ設定例​/check_mem_pl

  [pukiwiki] *nagiosgraphへのグラフ設定追加例[check_mem.pl] [#d79c6d0f] nagios exchangeから取得したcheck_mem.plの実行結果 …

no image

サーバ運用でよく使うスクリプト(netstat)

最近ご無沙汰なのでシェルの書式を忘れてきた…ということで自分用に備忘録。 – netstatでステータスが”ESTABLISHED”のセッションを一覧表示し、1秒更 …

nagios​/plugin​/SNMP​/ロードアベレージ監視

  [pukiwiki] *ロードアベレージ監視[check_snmp_load.pl] [#v02685d2] **スクリプト [#g9e2c6a2] check_snmp_load.pl 使用例: …

no image

[MySQL] “Lost connection to MySQL server during query (2013)”が出たので調べてみた

  お客さんのシステムのMySQL DBサーバーにて、バックアップ用にmysqldumpのジョブをcronで実行していたところ ある日を境に“Lost connection to MySQ …

nagios core​/3.監視対象設定

※編集中 関連記事: nagios core​/1.インストール nagiosgraph​/メモ:nagiosグラフで出力されるレポートについて nagios​/plugin​/SNMP​/mem監視 …

宅麺