MySQLのCRON自動バックアップ

Movable Type本体の管理画面にもバックアップ機能は付いているが、手動だと忘れがち。そんな物臭な私向きなのが、指定された日時にプログラムを実行するCRON機能を使ってのMySQLバックアップファイルの自動作成。

設定可能なレンタルサーバーは限られる。 「CRON」を使えるかどうかがポイント。当サイトで利用中の「さくらインターネット」は可能。

ネット検索すると幾つかの方法が見付かるが、毎日上書きするのではなく、日別にファイルを作成してくれるタイプが安心かも。旅行などで留守にしている間にデータベースが飛んだりした場合、肝心のバックアップファイルが使い物にならなかったら話にならない。

1. backup.sh ファイルを作成

以下は例としてユーザー名「umkrs」、パスワード「12345678」、データベース名「umkrs_db」などにしてあるので適宜変更。TeraPadなどのテキストエディタを使い、文字コード「UTF-8」、改行コード「LF」、拡張子「sh」で保存。

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
KEEPDAY=30
TODAY=`date +'%y%m%d'`
DBDUMP_FILE=mysql.$TODAY
RMFILE=mysql.`date -v -"$KEEPDAY"d +%y%m%d`.gz
HOME_DIR=/home/umkrs
BACKUP_DIR=$HOME_DIR/backup
cd $BACKUP_DIR
mysqldump -Q --host=mysql999.db.sakura.ne.jp \
--user=umkrs --password=>12345678 umkrs_db >\
$DBDUMP_FILE
gzip $DBDUMP_FILE >/dev/null 2>&1
if [ $? != 0 -o ! -e $DBDUMP_FILE ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE
exit 0
fi

まとめると、個別に修正が必要になる行は

  • HOME_DIR=/home/umkrs
  • mysqldump -Q --host=mysql999.db.sakura.ne.jp \
  • --user=umkrs --password=>12345678 umkrs_db >\

2. サーバーにアップ

さくらインターネットならば「www」内ではなく、その上のホームディレクトリ直下、shファイルに書き込んだ通りの「/home/umkrs」の階層が吉。「www」だとウェブ上から見ることが出来るらしい? テキストモードで転送し、アクセス権を「705」または「755」にする。

3. サーバー上にディレクトリを作る

shファイルと同じ「/home/umkrs」の階層に、「backup」という名称のディレクトリ(フォルダ)を新たに作っておく。30日分のファイルがここに保存されることになる。

4. CRONを設定

さくらインターネットならば、レンタルサーバーのコントロールパネルにログイン。メニュー「CRONの設定」から「新規項目を追加」。時刻などの入力数字は勿論任意で。

CRON自動バックアップ

画面内に付記されているが、メール通知が不要である場合の実行コマンドは、

/home/umkrs/backup.sh 1> /dev/null

メール通知が欲しい場合の実行コマンドは、ファイル名のみとする。

/home/umkrs/backup.sh

後は「backup」ディレクトリに毎日ファイルが作成されていればOK! ではなく、MT本体でのバックアップも面倒がらずに行わなくては。


補足

MySQLのバージョンアップに伴い、バックアップ作業は機能しているが、警告メールが届くようになった。

Warning: Using a password on the command line interface can be insecure.

パスワードを記述するのはセキュリティ上好ましくない、と。別ファイルを作るなど対処法はあるようだが、メールがうざいだけで害はないので、ひとまず放置中……