技術ネタ

Coreserverのデータを自動バックアップする

技術ネタ
スポンサーリンク

どんな記事?

Coreserver V1 CORE-MINIプランで、MySQLデータベースのダンプおよびサイトディレクトリのバックアップを、自動で定期的に取得できるようにした記事です。もちろん他のプランでも使えます。

経緯

こんぶちゃんとのDiscordで、こんな雑談をしたのがきっかけです。

こんぶ
こんぶ

コアサーバーのCORE-MINIプラン、自動バックアップないけど手動でどっかに取ってる?

かなで
かなで

V1だとCORE-Cじゃないと自動じゃないのね~!(実はバックアップあまり取ってなかったなんて言えない…)

こんぶ
こんぶ

コンパネ見たらDBバックアップ手動で作れるな!

かなで
かなで

手動ならとりあえず実行はできそうだけど、Cronジョブ設定できるしもしかしたら自動化できるかも?

調査

ということで調べてみました。
そしたらあっさりヒット!

こちらのサイトを参考にしたぞ!

でもかなり古い記事だったので、Coreserverの環境も新しくなってるし使えないかも…と思いつつ試してみました。

スクリプトの微修正

※ 改行コードはLFで保存してください。

mysql_backup.sh

まずはデータベースのバックアップから。
結論から言うとほとんど変更せずに動きました。最終的にこんな感じのコードに。
設定はそれぞれの環境に合わせて書き換えてください。

n日以前のバックアップ削除のところは試してないです。

#!/bin/sh

# 設定
DATABASE=foo_hogehoge
DBUSERNAME=foo_hogehoge
PASSWORD=password
COREUSERNAME=foo
BACKUPDIR=_db_dump
KEEPDAY=14
MAILADDRESS=foo@hoge.com

# 初期化
PREFIX=mysql
SERVER=localhost
NOWDATE=`date +%Y%m%d-%H%M%S`
DESTDIR=/virtual/$COREUSERNAME/$BACKUPDIR
DUMPFILE=$PREFIX.$DATABASE.$NOWDATE.dump
TARFILE=$PREFIX.$DATABASE.$NOWDATE.tar.gz
OLDDATE=`date "-d$KEEPDAY days ago" +%Y%m%d`

# MySQLダンプ/圧縮
cd $DESTDIR
/usr/local/mysql/bin/mysqldump $DATABASE --host=$SERVER -u $DBUSERNAME --password=$PASSWORD -e --no-tablespaces > $DUMPFILE
tar zcvf $TARFILE $DUMPFILE

#メール送信
/usr/bin/uuencode $TARFILE $TARFILE | /usr/bin/mail -s "mysql backup $NOWDATE" $MAILADDRESS

# 処理判定
if [ $? != 0 -o ! -e $TARFILE ]; then
    echo "backup faild -- ($DUMPFILE)"
    exit 1
fi

# 圧縮前ファイル削除
rm -f $DUMPFILE

# n日ローテートを削除
rmfile=$DESTDIR/$PREFIX.$DATABASE.$OLDDATE.tar.gz
if [ -e $rmfile ]; then
    rm -f $rmfile
fi

directory_backup.sh

参考にしたコードではpublic_html配下すべてをバックアップしていたのですが、複数サイトを持っている&Coreserverではスクリプトの実行時間が長いとKillされてしまうので、サイト毎に実行することに。

こちらも3日以前のアーカイブは消すようになってるので、必要に応じて変えてください。

#!/bin/sh

SITENAME=foohoge.com

find ./backup/ -name "`date +%Y`*" -ctime +2 | xargs rm -f
tar cvfz ./backup/$SITENAME.`date +%Y%m%d`.tar.gz -X exclude.txt public_html/$SITENAME

exclude.txt

バックアップから除外するファイルやディレクトリの設定です。

*tmp*
*.wrk*
*cache*
*log*

配置&設定

配置&パーミッション

スクリプトには実行権限を与えておきます。700でいいと思います。

スクリプト群はルートに置きました。(※ ドキュメントルートではなく、ルートです)
必要に応じて変えてOKですが、DBの設定とか書いてあるファイルなのでpublic_html配下に置かないようにしましょう。

配置したら、一度ターミナルから叩いてうまく動くか確認しておきましょう。

Cronの設定

コントロールパネルからGUIで設定できます。便利だね。

実行時は多少負荷がかかると思うので、タイミングを少しずらすといいと思います。

無事に自動バックアップできました

夜中に仕掛けておいたジョブで無事にバックアップできたので記事にしました。
CORE-MINIプランでも充分に使えますね!

ただしジョブの負荷はCGI負荷として加算されますのでご注意を。

タイトルとURLをコピーしました