現在、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を実行してバックアップサーバに圧縮されたデータベースファイルがあることを確認しておく。