ようこそゲストさん

ひとぅブログ

2009/01/04(日) CORESERVER.JPでMySQL(DB)を自動バックアップする方法

インターネット はてブ情報 はてブに登録 はてブ数
adairyをデータベースで運用しだしてから気になっていたのがデータベースのバックアップ。ウェブコンテンツは他サーバにrsyncコマンドを使って二重化しています。(自動化できていないので、rsyncはまた別の機会で取り上げたいと思います。)

今回はデータベースを自動バックアップする方法をご紹介します。

一応CORESERVER.JP(コアサーバ)で動作確認を取れた方法をご紹介しますが、おそらく他のサーバでもそれほど大きな差は無いと思います。ご参考にしていただければ幸いです。

やりたいこと

  • データベースのバックアップ(dumpファイル→圧縮)
  • 何世代か残したい
  • 他サーバへFTP転送
私の場合はCORESERVER.JP内に何世代かバックアップファイルを残しておき、万が一の事を考え、他社のサーバ(私はさくら)へ最新のファイルをFTPで転送するようにしたいと思います。以下にその設定手順についてご紹介しておきます。

設定手順

1.CORESERVER.JP側に「backup-mysql」ディレクトリを作る(/virtual//backup-mysql/)
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)に設定

以上で完了です。

参考サイト

以下のサイトを参考にさせていただきました。ありがとうございました。

関連エントリー

# matakichi 2009年11月28日(土) 午後8時45分

Wordpressのデータベースバックアップの参考にさせていただきました。
1からスクリプトを組む手間が省けて大変助かりました!

# ひとぅ 2009年11月29日(日) 午前1時54分

matakichiさん、コメントありがとうございます。
お役に立てたようでよかったです(*^_^*)。


#  非公開コメント   
  • TB-URL  http://hitoxu.com/0516/tb/
  • adiaryのデータベースをMySQLに移行しました。 ひとぅブログ ひとぅ
    ひとぅブログではadiaryをMySQLは使わず、テキスト版(擬似データベース)を利用していました。サイドバーのSystem Infoの欄に「RDBMS : pseudo DB」と表示されていればテキスト版です。テキスト版のメリットはMySQLやPostg...
  • CoreserverでMySQLのデータを自動的にバックアップする方法 ABCP-weblog
    Coreserverで、MySQLデータベースを自動でバックアップする方法。以下のスクリプト(backup.sh)をcronで定期的に実行します。#!/bin/sh/usr/local/mysql/bin/mysqldump -h localhost -c...
  • CORESERVERでWordpressのDBバックアップを自動化する M::Dialog
    MovableTypeで運用している時もそうでしたが、ブログのバックアップには無頓着な方だと思います。気の向いたときにブログシステム上でエクスポートするくらい。それでもMovableTypeの時は、静的ページを出力していたので、ブログ自体が表示されなくなる...