adairyをデータベースで運用しだしてから気になっていたのがデータベースのバックアップ。ウェブコンテンツは他サーバにrsyncコマンドを使って二重化しています。(自動化できていないので、rsyncはまた別の機会で取り上げたいと思います。)
今回はデータベースを自動バックアップする方法をご紹介します。
一応CORESERVER.JP(コアサーバ)で動作確認を取れた方法をご紹介しますが、おそらく他のサーバでもそれほど大きな差は無いと思います。ご参考にしていただければ幸いです。
目次
■ やりたいこと
- データベースのバックアップ(dumpファイル→圧縮)
- 何世代か残したい
- 他サーバへFTP転送
私の場合はCORESERVER.JP内に何世代かバックアップファイルを残しておき、万が一の事を考え、他社のサーバ(私はさくら)へ最新のファイルをFTPで転送するようにしたいと思います。以下にその設定手順についてご紹介しておきます。
■ 設定手順
1.CORESERVER.JP側に「backup-mysql」ディレクトリを作る(/virtual/
2.以下の2ファイルをbackup-mysql内に設置する。
- backup.sh(パーミッション755)
#!/bin/sh #===============================================================# # 設定(ここを自分に合わせる) DATABASE=【データベース名】 DBUSERNAME=【データベースユーザー名】 PASSWORD=【データベースパスワード】 XREAUSERNAME=【CORESERVERユーザー名】 BACKUPDIR=backup-mysql KEEPDAY=【何日間(何世代)バックアップを残すか】 # 初期化(XREA/CORESERVER用) PREFIX=【データベース名(ユーザー名_除く)】 SERVER=localhost NOWDATE=`date +%Y%m%d` DESTDIR=/virtual/$XREAUSERNAME/$BACKUPDIR DUMPFILE=mysql_$PREFIX.dump TARFILE=$PREFIX.$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 > $DUMPFILE tar zcvf $TARFILE $DUMPFILE # 処理判定 if [ $? != 0 -o ! -e $TARFILE ]; then echo "backup faild -- ($DUMPFILE)" exit 1 fi # 圧縮前ファイル削除 rm -f $DUMPFILE # n日ローテートを削除 rmfile=$DESTDIR/$PREFIX.$OLDDATE.tar.gz if [ -e $rmfile ]; then rm -f $rmfile fi cp $PREFIX.$NOWDATE.tar.gz sakura.$PREFIX.tar.gz #===============================================================# 【?バックアップするDBの数だけすべて記入?】 #===============================================================# ftp -n < ftp_command
- ftp_command
open 【バックアップ先FTPサーバURL】 user 【FTPユーザー名】【FTPパスワード】 bin prompt cd backup-mysql put sakura.【データベース名(ユーザー名_除く)】.tar.gz ……【?バックアップするDBをすべて記入?】 quit
3.SSHでログオンし、「backup.sh」を実行してみてうまく動作するか確認
4.正常動作を確認後、cronでbackup.shを1日1回(例えば23:50)に設定
以上で完了です。
■ 参考サイト
以下のサイトを参考にさせていただきました。ありがとうございました。