Linux上で、全Mysqlダンプを作成し、S3へアップロードを簡単に行えるスクリプトを作成してみました。
全MySQLダンプ作成スクリプト
まず、全MySQLダンプを作成するスクリプトが以下です。
ユーザー、パスワード、ホストを設定して、実行するだけで、簡単にダンプ作成ができます!
スクリプトの概要は、こんな感じです。
- 1時間毎にダンプ作成を想定、24世代保持するローテート
- /DUMP_BACKUPSディレクトリの中にダンプ格納用各DB名ディレクトリを作成
- 全DBのダンプファイルを作成 (mysql、information_schema、performance_schemaを除外)
- アーカイブ
create_all_dump.shを/root/直下に格納します。
#!/bin/bash USERNAME=root ←ユーザーを設定設定(全データベースにアクセスできるユーザー) PASSWORD="password" ←パスワードを設定 DBHOST=localhost ←ホストを設定 BACKUPDIR="/DUMP_BACKUPS" DBEXCLUDE="mysql information_schema performance_schema" ←除外したいDBを指定 COMP=gzip PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/mysql/bin DATE=`date +%Y%m%d` DNOW=`date +%H` LOGERR=$BACKUPDIR/ERRORS_$DBHOST-`date +%N`.log if [ ! -e "$BACKUPDIR" ] # Check Backup Directory exists. then mkdir -p "$BACKUPDIR" fi touch $LOGERR exec 7>&2 exec 2> $LOGERR dbdump () { mysqldump --user=$USERNAME --password=$PASSWORD --host=$DBHOST $1 > $2 return 0 } SUFFIX="" compression () { if [ "$COMP" = "gzip" ]; then gzip -f "$1" echo echo Backup Information for "$1" gzip -l "$1.gz" SUFFIX=".gz" elif [ "$COMP" = "bzip2" ]; then echo Compression information for "$1.bz2" bzip2 -f -v $1 2>&1 SUFFIX=".bz2" else echo "No compression option set, check for settings" fi return 0 } if [ "$DBHOST" = "localhost" ]; then HOST=`hostname` else HOST=$DBHOST fi DBNAMES="`mysql --user=$USERNAME --password=$PASSWORD --host=$DBHOST --batch --skip-column-names -e "show databases"| sed 's/ /%/g'`" # If DBs are excluded for exclude in $DBEXCLUDE do DBNAMES=`echo $DBNAMES | sed "s/b$excludeb//g"` done for DB in $DBNAMES do DB="`echo $DB | sed 's/%/ /g'`" if [ ! -e "$BACKUPDIR/$DB" ] # Check DB Directory exists. then mkdir -p "$BACKUPDIR/$DB" fi # Delete old dump eval rm -fv "$BACKUPDIR/$DB/*.$DNOW.sql.*" # Create dump dbdump "$DB" "$BACKUPDIR/$DB/${DB}_$DATE.$DNOW.sql" compression "$BACKUPDIR/$DB/${DB}_$DATE.$DNOW.sql" done if [ -s "$LOGERR" ] then STATUS=1 else STATUS=0 fi eval rm -f "$LOGERR" exit $STATUS
S3アップロードスクリプト
事前準備
S3コマンドインストール
S3コマンドがインストールされていない場合は、以下のコマンドでインストールする。# yum -y install –enablerepo=epel s3cmd
S3_CLIの設定
S3にCLIでアクセスできるようにするため、以下のようにして設定する。
今回、アクセスするIAMユーザーは、S3のフルアクセス権限を付与して作成しました。
# s3cmd --configure ←Enter Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. Access key and Secret key are your identifiers for Amazon S3 Access Key: XXXXXXXXXXXXXXXXXXXX ←入力Enter Secret Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ←入力Enter Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: ←Enter Path to GPG program [/usr/bin/gpg]: ←Enter When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP and can't be used if you're behind a proxy Use HTTPS protocol [No]: ←Enter On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't conect to S3 directly HTTP Proxy server name: ←Enter New settings: Access Key: XXXXXXXXXXXXXXXXXXXX Secret Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: HTTP Proxy server port: 0 Test access with supplied credentials? [Y/n] Y ←Y 入力Enter Please wait... Success. Your access key and secret key worked fine :-) ←接続確認OK! Now verifying that encryption works... Not configured. Never mind. Save settings? [y/N] y ←y入力Enter Configuration saved to '/root/.s3cfg'
S3コマンドで、アップロードテスト
# echo hello > hello.txt # s3cmd put -P hello.txt s3://Buket_Name/
S3アップロードスクリプトの設置
次にダンプファイルをS3にアップロードするスクリプトを設置します。ダンプ作成スクリプトと同様の場所に保存してください。
本スクリプトは、1時間毎に作成されたダンプファイルのみをS3へアップロードします。
“Buket_Name“の部分のみ修正して使用します。
#!/bin/sh DATE=`date +%Y%m%d` HH=`date +%H` DUMPDIR="/DUMP_BACKUPS/" cd $DUMPDIR DUMPLIST=`find . -name "*.$HH.sql.gz"` for DUMP_PATH in $DUMPLIST do DUMP_PATH="`echo $DUMP_PATH | sed s@^./@@`" DBNAME=`echo $DUMP_PATH | awk -F'/' '{print $1}'` s3cmd put -P $DUMPDIR$DUMP_PATH s3://Buket_Name/mysql_dump/$DBNAME/$DBNAME"_"$DATE"."$HH".sql.gz" done exit 0
全MySQLダンプ作成スクリプトの実行後に、動くのがベストなので、MySQLダンプ作成スクリプトのexit $STATUS
の前に以下のように追記しておきます。
: sh s3uploader.sh ←追記 exit $STATUS
自動起動設定
毎時1分に全MySQLダンプ作成スクリプトを起動をcronに設定
01 * * * * /root/create_all_dump.sh
これで、全MySQL_Dump作成か〜ら〜の、S3アップロードが自動で行われます。
S3に格納したファイルを自動で削除するには
S3側に格納したファイルを自動で削除するには、S3のLifecycle Rulesの機能を使用しました。
- マネージメントコンソールにて、[S3]⇒バケット選択⇒[Properties]⇒[Lifecycle]⇒[Add rule]を押下する。
- Action on Current Version:[Expire Only]を選択する。
- Expire 3 days after the object’s creation date. (ファイルを格納して、3日後には削除するように設定。)
- Action on Previous Versions:[Do Notiong]を選択する。
- Rule Name: 任意名を入力する。
元記事はこちらです。
「全MySQLダンプ作成か〜ら〜の、S3アップロードをスクリプトで簡単にする」