ksaitoの日記

日々試したことの覚え書き

mysqlのバックアップ

Ubuntu 9.10から10.04にアップグレードに伴なってzabbixが1.6から1.8にアップグレードされました。
データベースのマイグレーションは、手動でやってくれというメッセージとともにzabbixは、動かなくなくなりました。
マイグレーションをする前にzabbix 1.6のデータベースをバックアップしてみました。

オンラインバックアップ

mysqlhotcopyというコマンドでデータベース稼動中にデータベースファイルをコピーすることができます。
バックアップ/リストアは、早いですが同じマシン、同じデータベース名に戻す必要があるためマイグレーションなどのバックアップに限定されます。
ハードウェアやサーバの障害に対応するためのバックアップについては、mysqldumpでないと対応できません。

バックアップの作成

mysqlhotcopyコマンドでバックアップを作成します。

mysqlhotcopy -u root -p [mysqlのrootユーザパスワード] [データベース名] [バックアップを作成するディレクトリ]

zabbixのデータベースバックアップは、次のように実行します。

$ sudo mysqlhotcopy -u root -p password zabbix .
Locked 73 tables in 0 seconds.
Flushed tables (`zabbix`.`acknowledges`, `zabbix`.`actions`, `zabbix`.`alerts`, `zabbix`.`applications`, `zabbix`.`auditlog`, `zabbix`.`conditions`, `zabbix`.`config`, `zabbix`.`dchecks`, `zabbix`.`dhosts`, `zabbix`.`drules`, `zabbix`.`dservices`, `zabbix`.`escalations`, `zabbix`.`events`, `zabbix`.`functions`, `zabbix`.`graphs`, `zabbix`.`graphs_items`, `zabbix`.`groups`, `zabbix`.`help_items`, `zabbix`.`history`, `zabbix`.`history_log`, `zabbix`.`history_str`, `zabbix`.`history_str_sync`, `zabbix`.`history_sync`, `zabbix`.`history_text`, `zabbix`.`history_uint`, `zabbix`.`history_uint_sync`, `zabbix`.`hosts`, `zabbix`.`hosts_groups`, `zabbix`.`hosts_profiles`, `zabbix`.`hosts_profiles_ext`, `zabbix`.`hosts_templates`, `zabbix`.`housekeeper`, `zabbix`.`httpstep`, `zabbix`.`httpstepitem`, `zabbix`.`httptest`, `zabbix`.`httptestitem`, `zabbix`.`ids`, `zabbix`.`images`, `zabbix`.`items`, `zabbix`.`items_applications`, `zabbix`.`mappings`, `zabbix`.`media`, `zabbix`.`media_type`, `zabbix`.`node_cksum`, `zabbix`.`nodes`, `zabbix`.`opconditions`, `zabbix`.`operations`, `zabbix`.`profiles`, `zabbix`.`proxy_dhistory`, `zabbix`.`proxy_history`, `zabbix`.`rights`, `zabbix`.`screens`, `zabbix`.`screens_items`, `zabbix`.`scripts`, `zabbix`.`service_alarms`, `zabbix`.`services`, `zabbix`.`services_links`, `zabbix`.`services_times`, `zabbix`.`sessions`, `zabbix`.`slides`, `zabbix`.`slideshows`, `zabbix`.`sysmaps`, `zabbix`.`sysmaps_elements`, `zabbix`.`sysmaps_link_triggers`, `zabbix`.`sysmaps_links`, `zabbix`.`trends`, `zabbix`.`trends_uint`, `zabbix`.`trigger_depends`, `zabbix`.`triggers`, `zabbix`.`users`, `zabbix`.`users_groups`, `zabbix`.`usrgrp`, `zabbix`.`valuemaps`) in 0 seconds.
Copying 74 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 73 tables (74 files) in 0 seconds (0 seconds overall).
$ ls
zabbix
$ tar cfz zabbix.tar.gz zabbix
$

リストア

バックアップをリストアできるか試します。
リストアは、バックアップしたディレクトリを/var/lib/mysql/[データベース名]でコピーします。
コピーしたあとでオーナとグループをmysqlに変更すればリストア完了です。

# cd /var/lib/mysql
# tar xfz [バックアップディレクトリ]/zabbix.tar.gz
# chown -R mysql:mysql zabbix/
# chown mysql:root zabbix/
# chmod 700 zabbix/
# chmod 660 zabbix/*
#

確認

リストアしたデータベースにアクセスして確認します。

$ mysql -u root -p zabbix
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 76
Server version: 5.1.41-3ubuntu12 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select count(*) from actions;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

mysql> 

バックアップ時間

mysqlhotcopyとmysqldumpのバックアップ時間を取ってみました。
mysqlhotcopyが約2.6秒、mysqldumpが約24秒でした。

$ time sudo mysqlhotcopy -u root -p password zabbix .
Locked 73 tables in 0 seconds.
...中略...
Copying 74 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 73 tables (74 files) in 0 seconds (0 seconds overall).

real	0m2.652s
user	0m0.030s
sys	0m0.220s
$
$ time mysqldump -u root -p zabbix > zabbix.mysqldump
Enter password: 

real	0m25.383s
user	0m0.440s
sys	0m7.410s
$

リストア時間

mysqlhotcopyのリストアがファイルコピーなのに対してmysqldumpのリストアは、SQL実行なのでテーブル数やデータ量に応じて時間がかかるようになります。
今回のzabbixのデータベースでmysqldumpのデータをリストアするには、約3分16秒かかりました。

$ time zcat zabbix.mysqldump.gz | mysql -u root -p zabbix
Enter password: 

real	3m21.355s
user	0m5.180s
sys	0m1.770s
$