現在、CPIさんの仮想専用サーバで開発しているが、
な、な、なんと!
50GBのバックアップサーバを無料で借りることができる。
共用バックアップストレージ|専用サーバー|レンタルサーバーなら【CPI】
というわけで、
データベースのバックアップサーバとして利用することにした。
とりあえずリモートにログイン
CPIのサーバではrootというアカウントはいないので、
細かいことは気にせず初期管理者のホーム直下でバックアップする。
ログイン後、
#最初にexpectをインストールしておく sudo apt-get install expect $ mkdir backup cd backup emacs dbbackup.sh
これでバックアップ用のシェルスクリプトを作成する。
dbbackup.shには下記のコードを書いた。
#!/bin/sh
#バックアップは3日
period=3
#バックアップ用のディレクトリ
bkdir='/home/**********/backup'
#ファイル名を定義
filename=`date +%y%m%d`
#MySQLのパスワード
PASSWORD="*****************"
# mysqldump実行
PROC_DUMP=`MYSQL_PWD=${PASSWORD} mysqldump --opt --all-databases --events -\
-default-character-set=binary -u root | gzip > $bkdir/$filename.sql.gz`
echo ${PROC_DUMP}
# 古いバックアップファイルの削除に関する処理をここに書く
ACCOUNT = "******"
HOST = "****************"
PW = "***********"
#バックアップサーバに圧縮したデータベースファイルを転送
expect -c "
spawn scp -P ***** ${filename}.sql.gz ${ACCOUNT}@${HOST}:/backup
expect \"${ACCOUNT}@${HOST}'s password:\n\"
send -- \"${PW}\n\"
expect {\"100%\" { exit 0 }}
"
※expect {\"100%\" { exit 0 }}がないと、cron実行時にscpコマンドが想定通りに実行されない
こんな感じ。
mysqldumpを一回変数に入れた後にechoで呼び出しは、
比較的新しいバージョンのMySQLではこうしておかないとwarningエラーになるらしい。
圧縮したデータベースファイルを転送する際、
expectを利用して平文のパスワードと一緒にscpで転送しているのは、
本当は認証鍵で送りたかったけど、
バックアップサーバの方が認証鍵に対応していないらしいからしぶしぶ。
ここまで出来たら、
sudo chmod +x dbbackup.sh
をして、cronに毎日早朝3時頃にこのスクリプトを実行する様に設定したら終了。
最後にバックアップサーバにログインして、
mkdir backup
バックアップ用のディレクトリを作成しておく。
とりあえず、
./dbbackup.shを実行してバックアップサーバに圧縮されたデータベースファイルがあることを確認しておく。





