QNAP NASでMySQL(MariaDB)のデータを定期バックアップする

QNAP NASのDBを定期バックアップする方法

QNAP NASをWEB+DBサーバとして使用していて、DBのデータを定期的に外部にバックアップする方法。

  1. 外部ストレージの作成
  2. バックアップシェルの作成
  3. シェル定期実行の設定(cron)
  4. cron設定を有効化

構成

今回は、以下の構成を例に実施する。

  • TS-231P(バックアップ元)
    • MariaDB(ほぼMySQL)
    • QTS 4.3.3(LinuxベースのQNAP独自OS)
  • 同一LAN内の共有ストレージ(バックアップ先)

外部共有ストレージの作成

まず、保存先の外部共有ストレージを準備する。
これは、QNAP NASと同一LAN内で共有されていれば何でも良い。

\\IPアドレス\共有フォルダ名でアクセスできること。

ここでは例として、以下の共有フォルダを作成する。

\\192.168.1.XXX\test

バックアップシェルの作成

ここからはQNAP NAS側の設定。

  1. まず、Tera Termなどで、NASにSSH接続する。
    NASへSSH接続する

  2. 以下のコマンドでシェルスクリプトの作成を開始する。

    # mkdir -p /mnt/HDA_ROOT/backup/sqldata :作業用ディレクトリ作成
    # vi /mnt/HDA_ROOT/backup/backupsql.sh :シェルスクリプト作成開始

    ※ 注意!!!
    上記の作業場所は任意の場所で構わないが、QNAP NASのデフォルト仕様では、再起動で初期化されるディレクトリがあるので注意!(というか、ほとんどの場所が初期化される)

  3. シェルスクリプトの内容は以下の通り。

    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 -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 -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ベースとは言え、動作が独特なので、注意したい。

投稿者: Output48

中学生の時に初めてHTMLに触れてからホームページ制作を独学で始める。 ベンチャー企業の営業、大手企業のSEを経て、独立。 ここ数年はWEB以外の仕事をしていたため、割と本気で勉強中。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です