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 $