1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【コピペ】オンプレミスからS3へのバックアップシェル

Last updated at Posted at 2019-08-23

前提

目的

サーバデータの定期バックアップ

手法

  • バックアップ先
    • S3
  • データ
    • zip化
  • 間隔
    • cron
  • 過去分
    • 指定個数だけ保持
    • それ以上のものは自動で削除

準備

aws側

awsの認証情報の作成

  • セキュリティ認証情報
    • サーバからS3へアクセスするために必要
    • 発行URL
    • 再発行不可能

S3に保存場所を作成

サーバ側

パッケージインストール

yum install -y zip

aws cliのインストール

  • aws cli
    • CLIでAWSを操作するための公式ライブラリ
    • セキュリティ認証情報を登録することで有効化
      • 実行したユーザに基づいて紐づけられる
      • 下記を統一
        • バックアップshellの実行権限を持つユーザ
        • 「aws configure」を実行して、認証情報を紐づけるユーザ
        • cronにバックアップshellを設定するユーザ

CentOS7

curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"

python get-pip.py

pip install awscli

aws configure

CentOS6

pythonは2.7以上必須

yum install -y centos-release-scl-rh

yum install -y python27

scl enable python27 bash

curl -O https://bootstrap.pypa.io/get-pip.py

python get-pip.py

pip install awscli --upgrade

aws configure

実装

環境に応じて変更する個所

  • 保存ディレクトリ
  • s3ディレクトリ
  • 保存上限個数
  • バックアップ対象

コード

#!/bin/sh

# 対象名
SRC_NAME=cs
# 保存ディレクトリ
DIR_TMP=/home/centos/backup
# S3ディレクトリ
DIR_S3=s3://backup
# 保存上限個数
LIMIT=3

# 前回ファイル削除
rm -rf $DIR_TMP/$SRC_NAME/*

# 日時取得
TODAY=`date +%Y%m%d%H%M`

# ディレクトリ作成
mkdir -p $DIR_TMP/$SRC_NAME/$TODAY

# 情報取得
cp -r /var/www/html $DIR_TMP/$SRC_NAME/$TODAY
mysqldump -u mysql -r $DIR_TMP/$SRC_NAME/$TODAY/mysqldump.sql --single-transaction --default-character-set=binary -B table_name

# 圧縮
zip -r $DIR_TMP/$SRC_NAME/$TODAY.zip $DIR_TMP/$SRC_NAME/$TODAY

# 転送
aws s3 cp $DIR_TMP/$SRC_NAME/$TODAY.zip $DIR_S3/$SRC_NAME/

# 過程ファイル削除(念のため、zipは次回まで残す)
rm -rf $DIR_TMP/$SRC_NAME/$TODAY

# 期限切れファイル削除
COUNT=0
for l in `aws s3 ls $DIR_S3/$SRC_NAME/ | sort -nr`; do
    if echo $l | grep "zip"; then
        # 上限以上のファイル削除
        if [[ $COUNT -ge $LIMIT ]]; then
        aws s3 rm $DIR_S3/$SRC_NAME/$l
        fi

        # カウンタ更新
        COUNT=$(( COUNT + 1 ))
    fi

done

cron設定

crontab -e

    0 1 * * * sh /home/centos/backup.sh
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?