カテゴリー
その他

QNAPでMariaDB(MySQL)の自動バックアップの設定をした話し

RedmineをQNAPでDockerのコンテナで稼働し始めた。RedmineのデータベースはDockerのコンテナではなく、QNAPで起動しているデータベースにしておく。QNAPでデータベースとなっているのはMariaDB、いわゆるMySQLとなる。PostgreSQLもインストールすれば使える。

やはり、仕事でRedmineを使うから、データベースのバックアックは必須である。バックアップをどうしようかと思えば、大抵考えるのはcronでmysqldubpを勝手に起動して、どこかのサーバーに保存していくこと。ここのどこかのサーバーをどうするか悩む。

どこかのサーバーといえば、ローカルにLinuxのサーバーがあればいいのだけど、今あるLinuxサーバーは古いのでお役御免にしたい。QNAPとかFreeNASとかNASはあるけど、NFSとか設定するのが面倒。

そこで考えた結果、手っ取り早く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=[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で同期していることを確認できた。

カテゴリー
その他

CandyCaneをRedmineに移行した。だけどデータ移行なんて考えないという話し。

現在作業記録をCandyCaneで行っている。CandyCaneは元々Redmineの機能をPHPで記述するということで始まったプロジェクトである。現在は、ほぼ開発は停止している。

CandyCaneはPHP5.6の上で動かしているので、PHP自体アップデートはない。新しくPHP7の上で動かそうにも難しい。実際にDockerのコンテナでPHP7のサーバーを起動してCandyCaneを動かしたが諦めた。この際、CandyCaneを捨ててしまおうと考えた。

つぎのバグトラッキングシステムを何にしようかいろいろ検討したが、チケットごとに時間での工数記録してお客さんに報告をしなければいけないので(これが一番大事)、結局はCandyCaneの大元のRedmineに落ち着いた。操作もあまり変わらないし。

最初はCandyCaneからRedmineにデータの移行をしようと考えたが、これは大変だったのでやめた。今月からCandyCaneの使用をやめてきっぱりRedmineでチケット管理をやっていく。チケット番号(issue ID)の重複をさけるため、チケット番号はGitでも管理しているので、チケット番号を途中まで採番しておく。これはissuesテーブルのidのオートインクリメントを設定し直すだけ。

CandyCaneは古いPHPが動くようにDockerのコンテナを立てて、CandyCaneのファイルとデータベースをそのまま移行するくらいで問題無かった。

最後に利用しているお客さんにCandyCaneからRedmineに変わったというアナウンスと、Redmineのアカウントを発行すれば完了。

しかしながら、CandyCaneを使い始めて11年経っていた。チケットは約3,000近く溜まっている。トラブルなくここまで無事に動いてくれた。ご苦労様でした。