RedmineをQNAPでDockerのコンテナで稼働し始めた。RedmineのデータベースはDockerのコンテナではなく、QNAPで起動しているデータベースにしておく。QNAPでデータベースとなっているのはMariaDB、いわゆるMySQLとなる。PostgreSQLもインストールすれば使える。
やはり、仕事でRedmineを使うから、データベースのバックアックは必須である。バックアップをどうしようかと思えば、大抵考えるのはcronでmysqldubpを勝手に起動して、どこかのサーバーに保存していくこと。ここのどこかのサーバーをどうするか悩む。
どこかのサーバーといえば、ローカルにLinuxのサーバーがあればいいのだけど、今あるLinuxサーバーは古いのでお役御免にしたい。QNAPとかFreeNASとかNASはあるけど、NFSとか設定するのが面倒。
SambaをLinuxサーバーのインストールしてファイルサーバーとして動かすよりも、サクッとQNAPを入れてしまったほうが簡単、安心、便利でおすすめ。ファイルサーバーだけではなくてIntelのCPUのQNAPなら、Dockerでいろいろとコンテナを設定してサーバーをたくさん立てられるしね。
そこで考えた結果、手っ取り早くDropboxに保存して同期をすることにした。バックアップとったけど、データベースと同じQNAPにバックアップファイルを保存していていたけど、QNAPが飛んでバックアアップファイル共々お亡くなりなんてないように。外部にデータを保存することは大事。QNAPにはディレクトリをDropboxなどのクラウドストレージサービスと同期をとってくれるHBS3というアプリケーションが用意されている。HBS3は情報が少ないけど、日本語化されているので何とか設定できそう。
MariaDBのバックアップのシェルスクリプトはこんな感じ。以下のサイトを参考にした、というよりもコピペ。
NASの MySQLを自動バックアップ (ただし、404 File Not FoundなのでGoogle検索のキャッシュから)
mysqldumpのパスが違うとか(最初mysqldumpがなかったらどうしようと焦った)、QNAPではfindが-mtimeオプションが対応していないとか、出力ファイル名に時分まで付けるとか、もろもろこちらに合わせて修正している。
#!/bin/sh
# バックアップの保存期間(days)は 5日とする。
# バックアップ保存用ディレクトリの指定
dirpath='/share/backup-data/mariadb-backup'
# ファイル名を指定する(※ファイル名で日付がわかるようにしておきます)
filename=`date +%Y%m%d%H%M`
# データベース全体をエクスポート
/mnt/ext/opt/mariadb/bin/mysqldump --opt --all-databases --events --default-character-set=binary -u root --password=[MySQLのrootのパスワード] | gzip > $dirpath/$filename.sql.gz
# パーミッション変更
chmod 700 $dirpath/$filename.sql.gz
# 保存期間を過ぎたバックアップを削除
find $dirpath/ -type f -mtime +5 |xargs rm -f
このシェルスクリプトを実行するとDropboxで同期をとるディレクトリ(ここでは/share/backup-data/mariadb-backup)にバックアップされる。このシェルスクリプトをcronで回せば完了。
しかし、QNAPのcronの設定は、
crontab -e
では保存してくれない。
vi /etc/config/crontab
で直接crontabを編集して、cronのサービスを再起動する。以上で完了。
無事にデータベースのダンプを出力して、Dropboxで同期していることを確認できた。
追記(2022年12月13日)
シェルスクリプトが消えていたので、再度設定しておいた。
“QNAPでMariaDB(MySQL)の自動バックアップの設定をした話し” への1件のコメント
[…] QNAPでMariaDBの自動バックアップの設定をした話し […]