QNAP NASをWEB+DBサーバとして使用していて、DBのデータを定期的に外部にバックアップする方法。
構成
今回は、以下の構成を例に実施する。
- TS-231P(バックアップ元)
- MariaDB(ほぼMySQL)
- QTS 4.3.3(LinuxベースのQNAP独自OS)
- 同一LAN内の共有ストレージ(バックアップ先)
外部共有ストレージの作成
まず、保存先の外部共有ストレージを準備する。
これは、QNAP NASと同一LAN内で共有されていれば何でも良い。
※ \\IPアドレス\共有フォルダ名でアクセスできること。
ここでは例として、以下の共有フォルダを作成する。
\\192.168.1.XXX\test
バックアップシェルの作成
ここからはQNAP NAS側の設定。
-
まず、Tera Termなどで、NASにSSH接続する。
-
以下のコマンドでシェルスクリプトの作成を開始する。
# mkdir -p /mnt/HDA_ROOT/backup/sqldata :作業用ディレクトリ作成 # vi /mnt/HDA_ROOT/backup/backupsql.sh :シェルスクリプト作成開始
※ 注意!!!
上記の作業場所は任意の場所で構わないが、QNAP NASのデフォルト仕様では、再起動で初期化されるディレクトリがあるので注意!(というか、ほとんどの場所が初期化される) -
シェルスクリプトの内容は以下の通り。
umask 077 dirpath='/mnt/HDA_ROOT/backup/sqldata' filename=`backup +%y%m%d` mount -t cifs -o username=[USER_NAME],password=[PASSWORD] //192.168.1.XXX/test $dirpath /mnt/ext/opt/mariadb/bin/mysqldump --opt --all-databases --events --default-character-set=binary -u [DB_USER] --password=[DB_PASS] | gzip > $dirpath/$filename.sql.gz find $dirpath/*.gz -mtime +60 | xargs rm -f umount $dirpath
シェルスクリプトの解説:
umask 077 作成ファイルを所有者のみアクセス可能とする
dirpath='/mnt/HDA_ROOT/backup/sqldata' SQLデータの保存先ディレクトリ
filename=`backup +%y%m%d` SQLデータの保存ファイル名生成
mount -t cifs -o username=[USER_NAME],password=[PASSWORD] //192.168.1.XXX/test $dirpath 保存元に保存先をマウント [USER_NAME]、[PASSWORD]は保存先の認証を設定
/mnt/ext/opt/mariadb/bin/mysqldump --opt --all-databases --events --default-character-set=binary -u [DB_USER] --password=[DB_PASS] | gzip > $dirpath/$filename.sql.gz SQLデータをファイルに出力し圧縮する [DB_USER]、[DB_PASS]はDBの認証を設定
find $dirpath/*.gz -mtime +60 | xargs rm -f 60日以前のバックアップデータを削除
umount $dirpath 保存先をアンマウント
シェル定期実行の設定(cron)
さいごに、作成したシェルを定期実行させる設定を行う。
Linuxにはcronと呼ばれる自動実行用デーモンプロセスがあるので、それを利用する。
通常はcrontab -e
コマンドで設定を編集できるが、QNAP NASの場合、上記の初期化問題で、このコマンドは使えない。
代わりに以下のコマンドで編集を開始する。
vi /etc/config/crontab
編集モードになったら、以下の一文を追加する。
0 0 * * 6 /mnt/HDA_ROOT/backup/backupsql.sh
コードの解説:
cronの設定(書き方)は、数字、左から「分」「時」「日」「月」「曜日」を意味している。
指定なしの場合は*(アスタリスク)を記入する。
項目 | 値 |
---|---|
分 | 0-59 |
時 | 0-23 |
日 | 1-31 |
月 | 1-12 |
曜日 | 0-7 (0:日、1:月、2:火、3:水、4:木、5:金、6:土、7:日) |
よって、上記コードの場合は、毎週土曜日の0時に実行となる。
cron設定を有効化
バックアップを定期実行するため、以下の方法でcron設定を有効化する。
- NASを再起動
- cronを再起動
NASを再起動
NASを再起動すれば、/etc/config/crontabの内容がデーモンプロセスに反映されるので、再起動後にスケジュール通り定期実行されるようになる。
cronを再起動
何らかの理由でNASを再起動したくない場合は、以下のコマンドを実行し、cronのデーモンプロセスを再起動する。
# cp -p /etc/config/crontab /tmp/cron/crontabs/admin # /etc/init.d/crond.sh restart
コマンドの解説:
# cp -p /etc/config/crontab /tmp/cron/crontabs/admin
保存用設定ファイルを実行用設定ファイルにコピー
# /etc/init.d/crond.sh restart
cronを再起動(設定が反映される)
まとめ
QNAP NASのOSはLinuxベースとは言え、動作が独特なので、注意したい。
以下の行が正常に動作していないのか古いファイルが消えてくれません。
find $dirpath -mtime +60 | xargs rm -f
うーん、何がおかしいのか・・・
find $dirpath -mtime +60だけ実行しても何も出力されません。
タイムスタンプもおかしくないし原因が分かりません。
findの$dirpathに「/*.gz」を付けたしたら動作しました
>acrolith 様
コメント有難うございます。
大変失礼しました!!
記事を修正しておきます。