さくらのVPS+CentOSで設定しておきたい自動バックアップ

| コメント(0) | トラックバック(0)

前回、BCPに引き続き今回はこのブログサーバーのバックアップ設定となります。 サーバーセットアップの情報はちょくちょく見るのですが、 今回のバックアップの仕組みなどはあまり見かけない? ので、お役に立てればと思い公開してみます。

前回:DB消しちゃった\(^o^)/オワタ。にならないためのBCP

※本内容について、ご自身で十分動作確認していただき、自己責任のもとご利用いただくようお願いします。

※内容の不備、改善点などもございましたら、twitterやメールでご指摘いただければ幸いです。

ぜひとも見て欲しい人

  • さくらのVPS入門したての人(はじめてLinxuサーバー構築した人)
  • バックアップ、なにそれ美味しいの?って思っている人
  • 前提vicdコマンドは知っていぜ!って人

構成&バックアップの対象データ

  • サーバー(さくらのVPS CentOS )

    • ファイルデータの自動バックアップ
    • MySQLデータの自動バックアップ

  • 自宅PC(CentOS)

    • 自動でバックデータをダウンロード

ファイルデータは基本apacheのdocument_rootフォルダごとになります。 サーバー側の基本はshellスクリプトを作りcronを利用した指定時刻の処理となります。 自宅PCはコマンド一発or24時間起動ならcronを仕組むだけを想定しています。

自動バックアップの仕組み設定

基本root権限か、または、sudoを利用してください。 自分はめんどうなのでrootになっています。

1. フォルダの作成

cmd
$ su -
$ mkdir /var/bkup         #バックアップ置き場
$ mkdir /var/shell        #shellスクリプト置き場
$ chmod 777 /var/bkup
$ chmod 777 /var/shell

2. mysqldumpコマンド専用のuser追加

バックアップ専用のmukaer_dumpアカウントを作ります。

adminはmysqlのroot権限があるuser、 mukaer_blogDB名はにしていますので 名前等は適切なものに変更してください。

2-1. mysqlに接続

cmd
$ mysql -u admin -p mukaer_blog

2-2. dumpに必要な権限user追加

sql
> grant select ,show view ,lock tables on  mukaer_blog.* to mukaer_dump@localhost ;

2-3. mysqlに設定反映

sql
> flush privileges;
> quit;

2.4 動作確認のため一度実行

cmd
$ mysqldump -u mukaer_dump  mukaer_blog > /var/bkup/dump.sql

3. mysqlデータのバックアップshellスクリプト設定

3-1.ソース取得

cmd
$ cd /var/shell/
$ wget http://mukaer.com/sample_dl/backup_shell/backup_mysql.sh

・ソース

bash
#!/bin/bash

##環境変数####################################
#バックアップ先
D_DIR="/var/bkup/"

#DB 名
DB_NAME="mukaer_blog"

#DB ユーザー
DB_USER="mukaer_dump"

#削除対象の日付 3日前
RMDAY=3

##処理#######################################

#削除対象の日付作成
RM_DATE=`date +"%Y%m%d" --date "${RMDAY} days ago"`

#今日の日付作成
TODAY=`date +'%Y%m%d'`

#dumpファイル名
D_FILE=${DB_NAME}"-"${TODAY}".sql"


##削除処理
#
for file in `find ${D_DIR}* -type f -name "${DB_NAME}-*.sql.gz"` ;
do
    #ファイルの日付取得
    F_DATE=`echo $file | sed -e "s/.*${DB_NAME}-\([0-9]\{8\}\)\.sql\.gz$/\1/g"`

    #日付比較      F_DATE  <= RM_DATE
    if [   ` expr $F_DATE + 0` -le  ` expr $RM_DATE + 0 `  ] ; then

    #ファイル削除
    rm -f $file

    fi

done;

##mysql dump 圧縮
#
mysqldump -u ${DB_USER}  $DB_NAME > ${D_DIR}${D_FILE}
chmod 666 ${D_DIR}${D_FILE}
gzip ${D_DIR}${D_FILE}

3-2.権限変更

cmd
$ chmod 777 /var/shell/backup_mysql.sh

3-3.動作確認

cmd
$ /var/shell/backup_mysql.sh
$ ls /var/bkup/
$ gzip -d 'ファイル名'     #ファイルの解凍
$ view 'ファイル名'         #中身の確認

4.ファイルデータのバックアックshell設定

4-1.ソース取得

cmd
$ cd /var/shell/
$ wget http://mukaer.com/sample_dl/backup_shell/backup_tar.sh

・ソース

bash
#!/bin/bash

##環境変数####################################
#バックアップ元のrootディレクトリ
S_ROOT_DIR="/var/www/"

#バックアップ元ディレクトリ
S_DIR="mukaer.com"

#バックアップ先
D_DIR="/var/bkup/"

#削除対象の日付 3日前
RMDAY=3

##処理#######################################

#削除対象の日付作成
RM_DATE=`date +"%Y%m%d" --date "${RMDAY} days ago"`

#今日の日付作成
TODAY=`date +'%Y%m%d'`

#バックアップファイル名
D_FILE=${S_DIR}"-"${TODAY}".tar.gz"

##削除処理
#
for file in `find ${D_DIR}* -type f -name "${S_DIR}-*.tar.gz"` ;
do
    #ファイルの日付取得
    F_DATE=`echo $file | sed -e "s/.*${S_DIR}-\([0-9]\{8\}\)\.tar\.gz$/\1/g"`


    #日付比較      F_DATE  <= RM_DATE
    if [   ` expr $F_DATE + 0` -le  ` expr $RM_DATE + 0 `  ] ; then

    #ファイル削除
    rm -f $file

    fi
done;

##tar圧縮
#
tar -C ${S_DIR} -czPf ${D_DIR}${D_FILE}   ${D_DIR}
chmod 666 ${D_DIR}${D_FILE}

4-2.権限変更

cmd
$ chmod 777 /var/shell/backup_tar.sh

4-3.動作確認

cmd
$ /var/shell/backup_tar.sh
$ ls /var/bkup/
$ tar -xvzf 'ファイル名'     #ファイルの解凍
$ ll 'フォルダ名'            #中身の確認

5.cronによる指定時間の実行設定

cmd
$ su -
$ crontab -e
0  4 * * * /var/shell/backup_mysql.sh >/dev/null  2>&1    #AM4:00 実行
15 4 * * * /var/shell/backup_tar.sh   >/dev/null  2>&1    #AM4:15 実行

6.自宅PCで自動ダンロードの設定 (CentOS )

6-1.フォルダ作成

cmd
$ mkdir /var/bkup
$ mkdir /var/shell
$ chmod 777 /var/bkup
$ chmod 777 /var/shell

6-2.ソースの取得

cmd
$ cd /var/sehll
$ wget http://mukaer.com/sample_dl/backup_shell/get_rsync.sh

・ソース

bash
#!/bin/bash

##環境変数####################################
#バックアップ先
D_DIR="/var/bkup/"

SSH_USER="ログインuser@ドメインorIPに変更"

##処理#######################################
rsync -avz -e ssh $SSH_USER:${D_DIR}  ${D_DIR}  --delete

6-3.権限変更

cmd
$ chmod 777 /var/shell/get_rsync.sh

6-4.sshキーの作成
サーバーのsshログインをパスワードなしにするため設定します。

cmd
$ cd ~/.ssh
$ ssh-keygen -t rsa   #rsa暗号方式で鍵を作る

下記メッセージが表示されるので、基本enterキーを押す

Generating public/private rsa key pair.
Enter file in which to save the key (/home/mukaer/.ssh/id_rsa)::   #← enterキー
Enter passphrase (empty for no passphrase):                        #← enterキー
Enter same passphrase again:                                       #← enterキー
Your identification has been saved in /home/mukaer/.ssh/id_rsa.
Your public key has been saved in /home/mukaer/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx mukaer@cent62.mukaer.com
The key's randomart image is:
+--[ RSA 2048]----+
|*oo              |
|B  +     .       |
|+o      . .      |
|..     = o       |
|.   .            |
|.        .       |
| .    .          |
|E                |
|                 |
+-----------------+

6-5.sshキーの公開キーをサーバーにアップロード

cmd
$ scp id_rsa.pub ログインID@サーバーIP:~/.ssh/authorized_keys

6-6.サーバー側にsshでログイン

cmd
$ ssh  ログインID@サーバーIP

初回アクセスだと(yes/no)が聞かれるので yesを入力

6-8.サーバー側の公開キーの権限変更

cmd
サーバー$ chmod 600 ~/.ssh/authorized_keys

6-9.サーバー側での操作終了

cmd
サーバー$ exit

6-10.パスワードなしでログインできるか確認

cmd
$ ssh  ログインID@サーバーIP

※パスワードなしで、ログイン出来なければフォルダの権限を見直す

cmd
サーバー$ chmod 755 /home
サーバー$ chmod 700 /home/ユーザー
サーバー$ chmod 700 /home/ユーザー/.ssh

6-11.shellの動作確認

cmd
$ /var/shell/get_rsync.sh
$ ls /var/bkup/

ファイルがあればOK
中身も確認

6-12.指定時刻に動かくためcron設定
※24時間起動している場合

cmd
$ crontab -e
0 5 * * * /var/shell/get_rsync.sh  #AM5:00

おわり

お疲れ様です以上で、設定が完了です。

この内容でのお約束!
いざ必要なとき、「動いていない\(^o^)/」に ならないため、最低週1回ではチェックしておきましょう。

自分のデータは自分で守る!!

関連記事

トラックバック(0)

トラックバックURL: http://mukaer.com/cgi-bin/mt/mt-tb.cgi/56

コメントする

PR

PR





検索

Loading

メニュー

twitter