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