バックアップ方法
mysqldumpコマンドでバックアップは実行できるようだ。構文は以下の通り。# mysqldump -u <ユーザー名> -p <DB名> > <出力ファイル名>.sql
# mysqldump -u zabbix -p zabbix > mysqldump_zabbix_`date +"%Y%m%d"`.sql
------------------------------
Enter password: ←★MySQLの"zabbix"ユーザーのパスワードを入力
------------------------------
ファイルを確認してみると、以下のようにファイルが出力されている。
# ls -l
------------------------------
-rw-r--r-- 1 root root 1525531580 5月 28 21:33 2017 mysqldump_zabbix_20170528.sql
------------------------------
ちなみに、mysqldumpは、MySQLのDBの中身をひたすらSQL文としてテキスト出力するコマンドとなっており、出力ファイルの中身はテキストデータになっている。テキストデータなので、圧縮するとファイルサイズがだいぶ小さくなるので、容量効率の観点からは圧縮するのもおすすめとなる。
試しに私の環境のバックアップファイルをzipで圧縮したら、7割以上の容量が削減できた。
# zip mysqldump_zabbix_20170528.sql.zip mysqldump_zabbix_20170528.sql
------------------------------
adding: mysqldump_zabbix_20170528.sql
(deflated 73%) ←★73%の容量が削減された、という意味
------------------------------
以上のように簡単に使えるmysqldumpであるが、1点問題があって、実行中はDBがロックされるため、バックアップ中はZabbixのGUI操作ができなくなり、監視にも影響がでるものと考えられる。
上記問題を回避するために、DBをロックさせないオプションとして、"--single-transaction"を付与することで、ロックを掛けずにバックアップを取得可能となる。
# mysqldump -u zabbix -p --single-transaction zabbix > mysqldump_zabbix_`date +"%Y%m%d"`.sql
上記コマンドであれば、バックアップ取得中であっても、ZabbixのGUI操作は継続して実施可能となる。
リストア方法
バックアップファイルからリストアを行う場合、mysqldumpはSQL文のテキストファイルなので、そのままSQL文としてMySQLに流してしまえばよい。以下に簡単にリストアの手順を記載する。
1. zabbix-serverの停止
リストア中はDBが使えなくなるため、zabbix-serverを停止しておく。# service zabbix-server stop
------------------------------
Shutting down zabbix server: [ OK ]
------------------------------
2. ZabbixのDBを削除
MySQLにログインし、リストア対象のDBを削除する。まずは、MySQLにログインする。
# mysql -u root -p
事前にDBの一覧を確認しておく。今回の削除対象は"zabbix"となる。
mysql> show databases ;
------------------------------
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
| zabbix | ←★削除対象
+--------------------+
4 rows in set (0.00 sec)
------------------------------
DBを削除する。
------------------------------
Query OK, 108 rows affected (0.07 sec)
------------------------------
削除後のDB一覧を確認し、問題なく削除されていることを確認する。
mysql> show databases ;
------------------------------
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
------------------------------
MySQLからログオフする。
mysql> quit
3. MySQLを停止し不要ファイルを削除
DB削除後に不要なファイルの削除を行うため、一度MySQLを停止する。
# service mysqld stop------------------------------
mysqld を停止中: [ OK ]
------------------------------
削除前にファイルを確認する。ib_logfile*とibdata1を削除する。これらはInnoDBの更新用のファイルらしいが、リストアしてMySQL起動時に再作成されるとのことなので、削除して問題ないようだ。
# ls -l /var/lib/mysql/
------------------------------
-rw-rw---- 1 mysql mysql 268435456 5月 29 14:53 2017 ib_logfile0 ←★削除対象
-rw-rw---- 1 mysql mysql 268435456 5月 28 21:33 2017 ib_logfile1 ←★削除対象
-rw-rw---- 1 mysql mysql 35651584 5月 29 14:53 2017 ibdata1 ←★削除対象
drwx------. 2 mysql mysql 4096 3月 19 23:04 2016 mysql
drwx------. 2 mysql mysql 4096 3月 19 23:04 2016 test
------------------------------
以下コマンドで不要ファイルを削除する。
# rm -f /var/lib/mysql/ibdata1
# rm -f /var/lib/mysql/ib_logfile*
4. MySQLを起動
# service mysqld start------------------------------
mysqld を起動中: [ OK ]
------------------------------
5. Zabbix用のDBを再作成
DBを作り直し、zabbixユーザーに権限を付与しておく。mysql> create database zabbix ;
------------------------------
Query OK, 1 row affected (0.00 sec)
------------------------------
mysql> grant all privileges on zabbix.* to zabbix@localhost ;
------------------------------
Query OK, 0 rows affected (0.00 sec)
------------------------------
6. リストア実施
mysqldumpのバックアップファイルをSQL文として、DBに流し込む。# mysql -u root -p zabbix < /root/mysqldump_zabbix_20170528.sql
7. zabbix-serverの起動
zabbix-serverを起動する。# service zabbix-server start
------------------------------
Starting zabbix server: [ OK ]
------------------------------
0 件のコメント:
コメントを投稿