Google Driveのスペースを利用してVPSに設置したWordpressデータのバックアップを設定してみた。
参考サイト:http://codenote.net/wordpress/3472.html https://qiita.com/aviscaerulea/items/53123ce5b79c80e31a71
Google driveをコマンドラインで利用する場合の参考サイト: https://timothy-quinn.com/backing-up-linux-server-files-to-google-drive/ 現在はリンク切れ。
まずはデータベースのバックアップ
#!/bin/sh #backup_db.sh DB_NAME=mydbname # wordpressのデータベースの名前 DB_USER=mydbuser # wordpressのデータベースユーザー名 DB_PASSWORD=mydbpassword # wordpressデータベースへのパスワード DB_HOST=localhost # データベースホストの指定 DATE_STR=$(date +\%Y\%m\%d-\%H\%M\%S) # 日付をつける BACKUP_PATH=/tmp #バックアップしたデータの格納先 BACKUP_FILE=$DB_NAME-$DATE_STR.sql # dbのファイル名を付ける GDRIVE_DIR_ID=0B840dMOrdKT5am9aRDlNUUFic0k # バックアップファイルを格納するGoogle Driveのフォールダ KEEP_DAYS=3 #バックアップされたファイルの保持期間? ## backup DB cd $BACKUP_PATH # バックアップ先へ遷移 mysqldump $DB_NAME --default-character-set=binary \ -h $DB_HOST -u $DB_USER -p$DB_PASSWORD > $BACKUP_FILE # MySQLにてデータベースをアーカイブ tar zcvf $BACKUP_FILE.tar.gz $BACKUP_FILE # tarで圧縮 gdrive upload --parent $GDRIVE_DIR_ID $BACKUP_FILE.tar.gz # Google Driveへアップ rm -f $BACKUP_FILE.tar.gz $BACKUP_FILE # 作ったバックアップファイルを削除 ## Housekeeping LIMIT_TIMESTAMP=$(date -d "$KEEP_DAYS days ago" +%s) gdrive list --no-header --max 1000 --query "'$GDRIVE_DIR_ID' in parents" | while read ln do ITR_ID=$(echo $ln | awk '{print $1}') ITR_DATE=$(echo $ln | awk '{print $(NF-1),$NF}') if [ $(date -d "$ITR_DATE" +%s) -lt $LIMIT_TIMESTAMP ] then gdrive delete $ITR_ID fi done
次にファイル類のバックアップ
#!/bin/sh # backup_file.sh DATE_STR=$(date +\%Y\%m\%d-\%H\%M\%S) #日付を設定 TARGET_PATH=/var/www/vhosts/ # バックアップするデータへのパス指定 TARGET_FILE=codenote.net # バックアップするファイルの指定 BACKUP_FILE=$TARGET_FILE-$DATE_STR.tar.gz # バックアップしたファイルの名前付け GDRIVE_DIR_ID=0B840dMOrdKT5SFg5UkZ2c05aWkU # google driveのフォールダの指定 KEEP_DAYS=7 # ファイルの保持期間の指定? ## backup files cd $TARGET_PATH #バックアップすべき場所へ移動 tar cfz $BACKUP_FILE $TARGET_FILE/ # ファイルの圧縮 gdrive upload --parent $GDRIVE_DIR_ID $BACKUP_FILE # google driveの所定フォールダへのアップロード rm -f $BACKUP_FILE #バックアップ元コンピュータ内でバックアップファイルを削除 ## Housekeeping LIMIT_TIMESTAMP=$(date -d "$KEEP_DAYS days ago" +%s) gdrive list --no-header --max 1000 --query "'$GDRIVE_DIR_ID' in parents" | while read ln do ITR_ID=$(echo $ln | awk '{print $1}') ITR_DATE=$(echo $ln | awk '{print $(NF-1),$NF}') if [ $(date -d "$ITR_DATE" +%s) -lt $LIMIT_TIMESTAMP ] then gdrive delete $ITR_ID fi done
結果的に画像のようにバックアップデータの転送に成功。
なおバックアップしたファイルを暗号化する場合は次の様なスクリプトを追加する。
# encrypt the tar openssl aes-256-cbc -a -salt -in "$TARGET_FILE-$DATE_STR.tar.gz" -out "$TARGET_FILE-$DATE_STR.tar.gz.enc" -pass 'pass:hogehoge'
ただいまシェルスクリプトの定時実行設定で躓き中。
OSはCentOS7.3なのだが従来の crontabでの設定では動かないようだ。