As MySQL gains widespread adoption and moves more broadly into the enterprise, ZRM for MySQL addresses the growing need among database administrators to protect their digital assets with a comprehensive backup and recovery solution.
Marten Mickos,
CEO of MySQL AB

オープンソースのソフトのみを使い、15分間でできるMySQL専用バックアップソフトのセットアップと確認の方法

著:Shailen Patel

問題点

MySQL に重要なデータを格納することが増えてきています。MySQLを使用している企業にとってデータの紛失は大きな問題になり収益、顧客、評判を落としかねません。MySQLのバックアップとリストアの設定をするためにはデータベース管理者には通常多くの時間と注意がかかってきます。

15分間の挑戦

15分間を目標にして、Linuxで稼働するMySQL 5.0データベースをバックアップしてみます。ソリューションには自由にダウンロードのできるオープンソースのソフトのみを使用します。

以下の状況を想定します:

主要なMySQLデータベースの管理はデータベース管理者がしています。データベース管理者はバックアップとリカバリのスクリプトを書く暇はありませんが 12時間毎の手動でのバックアップは面倒です。InnoDBストレージエンジンで稼働するMySQLデータベースをロジカルバックアップする計画です。 ロジカルバックアップの利点は: 
1)SQL文が含まれていてデータベースやテーブルの構造と内容が再構築できる 
2)データベースが稼働中でもバックアップの実行ができる(ホットバックアップができる) 
3)異なるプラットフォームやデータベースにリストアができる

テストには以下を使用しました:
サーバーのOS: Fedora Core 5
MySQLのバージョン: MySQL 5.0.22 (http://www.mysql.com)

ここではコミュニティプロジェクトの一端としてNetflixから提供されたデータベースを使用します。みどり色で書かれたコマンド部分を入力してください。

ソリューション:Zmandaリカバリマネージャ(ZRM)for MySQL

Zmandaリカバリマネージャ(ZRM)for MySQLはMySQL専用のバックアップとリカバリのソリューションで簡単に使えて柔軟性と堅牢性があるためデータベース管理者の業務が楽になります。 
 
15分間に実行することの概要:

  1. MySQL データベースサーバにZRM for MySQLをインストール
  2. MySQL データベースサーバのZRM for MySQLを設定
  3. バックアップの実行
  4. データの保持方針に従って自動バックアップの設定
  5. バックアップのレポート通知
  6. バックアップイメージの確認
  7. 完全リストアの実行
注記:みどり色で書かれたコマンド部分を入力する

前もって必要な準備

  • MySQLサーバのインストールと設定
  • ひとつ以上の稼働するデータベース
  • 適切なパーミッションのあるMySQLのユーザ
  • パスワード'pass123'でmysqlの'backup-user'へのアクセス権を与える
  • mysql>  grant select, insert, update, create, drop, reload, shutdown, alter, super, lock tables, replication client on *.* to 'backup-user'@'localhost' identified by 'pass123';
  • mysql> show grants for 'backup-user'@'localhost';
  • Grants for backup-user@localhost
  • | GRANT SELECT, INSERT, UPDATE, CREATE, DROP, RELOAD, SHUTDOWN, ALTER, SUPER, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup-user'@'localhost' IDENTIFIED BY PASSWORD '591051bb593d2f5b' WITH GRANT OPTION |
  • ZRM 1.1 for MySQLにはperl-DBIとperl-XML-parserが必要です。perl-DBIとperl-XML-parserをインストールした後に ZRM 1.1 for MySQLをインストールします。perl-DBIとperl-XML-parserはすべてのLinuxディストリビューションから取得できます。 perl-DBIとperl-XML-parserのパッケージはこちらから取得できます (perl-DBI & perl-XML-parser)
コツ: 本文の例をコピー&ペーストして、環境に合わせた修正をする

ZRM for MySQLをインストール

1. LinuxサーバにrootでログインしてZRM for MySQLをダウンロード:

ダウンロードするZRM for MySQLのバージョン: MySQL-zrm-1.1-1 (http://www.zmanda.com/download-zrm.php)

2. rootでZRM for MySQL 1.1コミュニティ版のパッケージをインストール

-bash-3.1# ls -lh MySQL-zrm-1*
-rw-rw-r-- 1 root root 101K Oct 16 17:29 MySQL-zrm-1.1-1.noarch.rpm

-bash-3.1# rpm -ivh MySQL-zrm-1.1-1.noarch.rpm
Preparing...                ########################################### [100%]
   1:MySQL-zrm              ########################################### [100%]


3. ZRM for MySQLのインストールを確認

ZRM ZRM for MySQLの実行ファイルは/usr/binに存在します:
-bash-3.1# ls -lh /usr/bin/mysql-zrm*
-rwxr-x--- 1 root root 86K Oct 16 15:04 /usr/bin/mysql-zrm
-rwxr-x--- 1 root root 26K Oct 16 15:04 /usr/bin/mysql-zrm-reporter
-rwxr-x--- 1 root root 13K Oct 16 15:04 /usr/bin/mysql-zrm-scheduler

ZRM for MySQLの構成ファイルは/etc/mysql-zrmに存在します:
-bash-3.1# ls -lh /etc/mysql-zrm/
-rwxr-x--- 1 root root 9.1K Oct 16 15:04 mysql-zrm.conf
-rwxr-x--- 1 root root   46 Oct 16 15:04 mysql-zrm-release
-rwxr-x--- 1 root root 2.8K Oct 16 15:04 mysql-zrm-reporter.conf
drwxr-x--- 2 root root 4.0K Oct 16 15:04 plugins
drwxr-x--- 4 root root 4.0K Oct 17 11:53 plugin-templates

その他のZRM for MySQLのファイルは以下に存在します:
Man pages    /usr/share/man/{man1,man5}
ライブラリ    /usr/lib/mysql-zrm
ログファイル    /var/log/mysql-zrm
キュメント    /usr/share/doc/MySQL-zrm-1.1

ZRM for MySQLからデータベースをバックアップする設定

ここでは340MBのMoviesというデータベースをバックアップします。MoviesデータベースにはMovieIDMovieRatingsという2つのテーブルが存在します。

-bash-3.1# mysql -u backup-user -p

mysql> use movies;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables ;
+-------------------------------+
| Tables_in_movies    |
+-------------------------------+
| MovieID                   |
| MovieRatings           |
+-------------------------------+
2 rows in set (0.00 sec)

1. root でLinux サーバにログイン

2. Moviesデータベースを毎日完全バックアップするように設定

テストのために「dailyrun」という名前のディレクトリを作成します。その後サンプルの構成ファイルであるmysql-zrm.confをコピーしてディレクトリに格納します。これによりデータベースを格納するバックアップセットをさらに柔軟に作成できます。

-bash-3.1# cd /etc/mysql-zrm
-bash-3.1# mkdir dailyrun
-bash-3.1# cp mysql-zrm.conf dailyrun/
-bash-3.1# cd dailyrun/
-bash-3.1# ls -lh
-rwxr-x--- 1 root root 8.8k Oct 17 15:58 mysql-zrm.conf

3. /etc/mysql-zrm/dailyrun/mysql-zrm.confを編集して以下にあるパラメータを変更。このファイルには MySQLの 'backup-user'のパスワードが暗号化されていない平文で格納されているので適切なパーミッションでファイルを保護します。

テストとして完全バックアップの実行をする:
Backup Level:
# Backup level. It can be full or incremental
# Use 0 for full and 1 for incremental backups
# This parameter is optional and default value is full backup.
backup-level=0

ロジカルバックアップを選択する:
Backup Method:
# Backup method
# Values can be "raw" or "logical". Logical backup are backups using
# mysqldump(1) tool
# This parameter is optional and default value is "raw".
backup-mode=logical

テストとしてバックアップの保持期間を10日間に設定する:
Retention Policy:
# Specifies how long the backup should be retained. The value can be
# specified in days (suffix D), weeks (suffix: W), months (suffix: M) or
# years (suffix Y). 30 days in a month and 365 days in a year are assumed
# This parameter is optional and the default is the backups are retained
# forever.
retention-policy=10D

使用するディスク容量を少なくするためにバックアップを圧縮する:

# This parameter should be set to 1 if backups should be compressed. If this
# parameter is set, gzip(1) command is used by default. If different
# compression algorithm should be used, it must be set in "compress-plugin"
# parameter. Default: There is no data compression.
compress=1

'Movies'データベースのみバックアップする選択をする:
Database(s) to backup:
# List of databases that are part of this backup set. Multiple database
# names are separated by space character. This parameter is ignored if
# "all-databases" is set 1.
databases=movies

MySQLのユーザーネームとパスワードは上記で作成されている:
(以下にあるパスワードは平文で格納される)
MySQL Server Parameters:
# MySQL database user used for backup and recovery of the backup set.
# This parameter is optional. If this parameter is not specified, values from
# my.cnf configuration file.
user="backup-user"

# MySQL database user password.
# This parameter is optional. If this parameter is not specified, values from
# my.cnf configuration file or no password is used.
password="pass123"

MySQLが設定され稼働する状態になったらこの作業を終了してもよい:
Verbosity of ZRM for MySQL Logging:
# This parameter controls the verbosity of MySQL ZRM logging. The MySQL ZRM logs
# are available at /var/log/mysql-zrm/mysql-zrm.log. This parameter is optional

# default value is 0 (less verbose).
# The valid values are 0 and 1
verbose=1

バックアップのレポートをメールで通知する:
(Linuxサーバが適切なアドレスにメールを送れる必要があります)
# After a backup run the backup report is emailed to the mailto address
# This parameter is optional and default behavior is not to send mail notifications.
mailto="dba@yourcompany.com"

/etc/mysql-zrm/dailyrun/mysql-zrm.confファイルを保存して終了

バックアップの実行

1. MySQLサーバでrootとしてZRM for MySQLを稼働させMoviesデータベースをdailyrunでバックアップし始める

-bash-3.1# mysql-zrm-scheduler --now --backup-set dailyrun

2. ZRM for MySQLのレポートは以下のように出力される  

Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log
INFO: ZRM for MySQL Community Edition - version 1.1
INFO: Input Parameters Used {
INFO:   quiet=0
INFO:   verbose=1
INFO:   retention-policy=1W
INFO:   backup-level=0
INFO:   destination=/var/lib/mysql-zrm
INFO:   databases=movies
INFO:   html-reports=backup-status-info
INFO:   backup-mode=logical
INFO:   password=******
INFO:   compress=
INFO:   user=backup-user
INFO: Getting mysql variables
INFO: mysqladmin --user=backup-user --password=***** variables
INFO: datadir is /var/lib/mysql/
INFO: mysql_version is 5.0.22-log
INFO: log_bin=ON
INFO: backup set being used is dailyrun
INFO: backup-set=dailyrun
INFO: backup-date=20061025161624
INFO: host=localhost
INFO: backup-date-epoch=1161818184
INFO: retention-policy=1W
INFO: mysql-zrm-version=ZRM for MySQL Community Edition - version 1.1
INFO: mysql-version=5.0.22-log
INFO: backup-directory=/var/lib/mysql-zrm/dailyrun/20061025161624
INFO: Executing pre-backup-plugin
INFO: Flushing the logs
INFO:  flush-logs
INFO: Getting master logname using command mysql --user=backup-user --password=***** -e "show master status"
INFO: backup-level=0
INFO: Command used for logical backup is mysqldump --opt --extended-insert --single-transaction --default-character-set=utf8 --create-options --user=backup-user --password=***** --databases movies > "/var/lib/mysql-zrm/dailyrun/20061025161624/backup.sql"
INFO: Logical backup done for the following database(s)
        movies
INFO: logical-databases=movies
INFO: next-binlog=mysql-bin.000030
INFO: last-backup=/var/lib/mysql-zrm/dailyrun/20061025160303
INFO: /var/lib/mysql-zrm/dailyrun/20061025161624/backup.sql=497892557fd97f4f8f4102ab866293a6
INFO: backup-size=306.20 MB
INFO: Compressing  backup
INFO: Command used is 'tar  --same-owner -cpsC  "/var/lib/mysql-zrm/dailyrun/20061025161624"  --exclude=backup-data  --exclude=index  . 2>/tmp/ZQr1wiV0Oi  | gzip 2>/tmp/LqilmZDG20 > "/var/lib/mysql-zrm/dailyrun/20061025161624/backup-data" 2>/tmp/NDX91Ym36X'
INFO: compress=
INFO: backup-size-compressed=69.72 MB
INFO: Removing all of the uncompressed/unencrypted data
INFO: Executing post-backup-plugin
INFO: read-locks-time=00:00:32
INFO: flush-logs-time=00:00:00
INFO: backup-time=00:01:08
INFO: backup-status=Backup succeeded
INFO: Backup succeeded
 
注記:
ここではテストのためにZRM for MySQLから即時バックアップを実行します。ZRM for MySQLでは以下のようにバックアップのスケジュールを設定することができます。
例として毎日の完全バックアップを1amに実行するように設定
-bash-3.1# mysql-zrm-scheduler --add --interval daily --start 01:00 --backup-level 0 --backup-set dailyrun
Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log DONE
スケジュールが設定されたことを確認する
-bash-3.1# mysql-zrm-scheduler --query
Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log 0 1 * * * /usr/bin/zrm-pre-scheduler --action backup --backup-set dailyrun --destination /var/lib/mysql-zrm --backup-level 0 --interval daily

バックアップのレポート通知

mysql-zrm-reporterコマンドでバックアップの概要を表示する 

-bash-3.1# mysql-zrm-reporter --where backup-set=dailyrun --show backup-status-info

backup_set  backup_date                                backup_level     backup_status       comment

-------------------------------------------------------------------------------------------------------------------------------------------
dailyrun  Wed 25 Oct 2006 04:16:24 PM PDT              0           Backup succeeded      ----

最初のレポートではバックアップセット 'dailyrun'の状態を表示。(完全バックアップ「バックアップレベル0」と差分バックアップ「バックアップレベル1」やバックアップの成功と失敗)

-bash-3.1# mysql-zrm-reporter --where backup-set=dailyrun --show backup-performance-info

backup_set     backup_date                            backup_level   backup_size  backup_size_compressed     backup_time
---------------------------------------------------------------------------------------------------------------------------------------------------------------
dailyrun  Wed 25 Oct 2006 04:16:24 PM PDT               0           306.20 MB             69.72 MB                       00:01:09

次のレポートではバックアップにかかった全時間を表示。圧縮されたバックアップのサイズと圧縮されていないバックアップのサイズも表示される。

バックアップイメージの確認

以下のmysql-zrmコマンドを実行してバックアップの整合性を検証する

-bash-3.1# mysql-zrm --action verify-backup --backup-set dailyrun

ZRM for MySQL Community Edition - version 1.1
INFO: Input Parameters Used {
INFO:   verbose=1
INFO:   retention-policy=1W
INFO:   backup-level=0
INFO:   databases=movies
INFO:   html-reports=backup-status-info
INFO:   backup-mode=logical
INFO:   password=******
INFO:   compress=
INFO:   user=backup-user
INFO: Uncompressing  backup
INFO: Command used is 'cat "/var/lib/mysql-zrm/dailyrun/20061025161624/backup-data"  |  gzip -d  | tar  --same-owner -xpsC  "/var/lib/mysql-zrm/dailyrun/20061025161624"  2>/tmp/bY1jIvcElN'
INFO: checksum for file /var/lib/mysql-zrm/dailyrun/20061025161624/backup.sql is correct
INFO: Verification successful
INFO: Removing all of the uncompressed/unencrypted data

完全リストアの実行

まずルート権限のあるユーザがMySQLにログインしてmoviesデータベースをドロップします。ここではセキュリティのためにMySQL の'root'ユーザを'admin'に変更しました。

-bash-3.1# mysql -u admin -p
mysql> show databases;
+----------------------------------+
| Database                    |
+----------------------------------+
| information_schema   |
| movies                        |
| mysql                          |
| test                              |
+-----------------------------------+
4 rows in set (0.00 sec)

mysql> drop database movies;
Query OK, 2 rows affected (0.67 sec)

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

1. どのバックアップをリストアするのか選択する 

-bash-3.1# mysql-zrm-reporter --show restore-info --where backup-set=dailyrun

backup_set  backup_date                                backup_level                  backup_directory
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dailyrun  Wed 25 Oct 2006 04:16:24 PM PDT                 0       /var/lib/mysql-zrm/dailyrun/20061025161624
                                                                  
2. リストアの開始。ここでは最後に取った完全バックアップをリストアする。(10月25日の午後4時16分に取ったバックアップ)

-bash-3.1# mysql-zrm -restore --backup-set dailyrun --source-directory \
/var/lib/mysql-zrm/dailyrun/20061025161624/

INFO: ZRM for MySQL Community Edition - version 1.1

INFO: Input Parameters Used {
INFO:   verbose=1
INFO:   retention-policy=1W
INFO:   backup-level=0
INFO:   databases=movies
INFO:   source-directory=/var/lib/mysql-zrm/dailyrun/20061025161624
INFO:   html-reports=backup-status-info
INFO:   backup-mode=logical
INFO:   password=******
INFO:   compress=
INFO:   user=backup-user
INFO: Getting mysql variables
INFO: mysqladmin --user=backup-user --password=***** variables
INFO: datadir is /var/lib/mysql/
INFO: mysql_version is 5.0.22-log
INFO: log_bin=ON
INFO: Uncompressing  backup
INFO: Command used is 'cat "/var/lib/mysql-zrm/dailyrun/20061025161624/backup-data"  |  gzip -d  | tar  --same-owner -xpsC  "/var/lib/mysql-zrm/dailyrun/20061025161624"  2>/tmp/1wNYPfSl01'
INFO: restoring using command mysql --user=backup-user --password=***** -e "set character_set_client=utf8;set character_set_connection=utf8;set character_set_database=utf8;set character_set_results=utf8;set character_set_server=utf8;source /var/lib/mysql-zrm/dailyrun/20061025161624/backup.sql;"
INFO: Restored database(s) from logical backup: movies
INFO: Shutting down MySQL
INFO: Removing all of the uncompressed/unencrypted data
INFO: Restore done in 140 seconds.
MySQL server has been shutdown. Please restart after verification.

rootで/sbin/service mysqld start を入力してMySQLのサービスを起動した後にデータベースがリストアされたことを確認

-bash-3.1# mysql -u backup-user -p
mysql> show databases;
+----------------------------------+
| Database                    |
+----------------------------------+
| information_schema   |
| movies                        |
| mysql                          |
| test                              |
+-----------------------------------+
4 rows in set (0.00 sec)
mysql> use movies;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-------------------------------+
| Tables_in_movies    |
+-------------------------------+
| MovieID                   |
| MovieRatings           |
+-------------------------------+
2 rows in set (0.00 sec)


完了!

たった15分間で高速で確実なMySQLのバックアップソリューションのインストールからリストアまでを実行することができました。自由にダウンロードができるバイナリもしくはコンパイルされたオープンソースのソフトのみを使いました。これでデータベース管理者は設定が簡単で確実にバックアップのできるZRM for MySQLを使ってデータベースを保護することができます。

References:
ZRM for MySQL
ZRM for MySQL Wiki
Zmanda Forums

Amandaネットワークバックアップ | MySQLバックアップ |パートナー | サイトマップ | 会社概要 | お問い合わせ

      Copyright © Zmanda, Inc. All rights reserved. Translated by Accutechs Co., LTD.
 
 
使用条件 | プライバシーポリシー     Copyright © Zmanda, Inc. All rights reserved. Translated by Accutechs Co., LTD.