圧縮されたmysqlダンプをs3に転送したい。
私は試した:
mysqldump -u root -ppassword -all-databases | gzip -9 | s3cmd put s3://bucket/sql/databases.sql.gz
しかし、私は得る:
ERROR: Not enough paramters for command 'put'
どうすればこれを(1行で)実行できますか?
これはs3cmd
1.5+( リンク ):$ mysqldump ... | s3cmd put - s3://bucket/file-name.sql
バックアップを開始する実際のファイルがありません。
s3cmd put /backup_dir/somefile.sql.gz s3://bucket/sql/
s3cmdは、ファイルと、バックアップするバケットの2つの基本的な引数を取ります。
第二に、私は以下のことは信用できませんが、基本的には中間スクリプトであなたが望むことをしています。基本的に、次のようにbak.shファイルを作成すると、そのシェルスクリプトはbashを介して実行可能になります。 (クレジット: http://www.wong101.com/tech-cloud/configure-s3cmd-cron-automated-mysql-backup )
S3BUCKET="<bucketname>"
# Array of Databases
DBS=("<db1>" "<db2>" "<db3>" "<db4>")
for i in "${DBS[@]}"
do
DBNAME=$i
FILE=$DBNAME-`date "+%Y%m%d-%H%M"`.sql.gz
mysqldump $DBNAME -u[uname] -p[password] | gzip -9> /home/$FILE
#location of s3cmd may vary, modify if needed
/usr/bin/s3cmd --config /root/.s3cfg put /home/$FILE s3://$S3BUCKET/DBBackup-$DBNAME/ >> /var/log/mysqlback.log
sleep 5
rm /home/$FILE
done
Mysqldumpストアのmysql.shをpipline経由でs3に直接作成します。ローカルファイルは保存されません。
#!/bin/bash
#/home/ec2-user/s3/mysql.sh
#logging
LOG_ROOT="/var/www/html/laravel/storage/logs/laravel-$(date +%Y-%m-%d).log"
# Basic variables
# Database credentials
USER=root
PASSWORD=password
Host=localhost
DB_NAME=dbname
#Backup_Directory_Locations
S3BUCKET=s3://bucket/database/$(date +%a).sql.gz
# Timestamp (sortable AND readable)
TSTAMP=$(date +"%Y-%m-%d %H:%M:%S")
#Dump of Mysql Database into S3\
echo "[$TSTAMP] MYSQL_Dump.WARNING: MySQL Dump for DB_NAME started from cron s3/mysql.sh" >> "$LOG_ROOT"
echo "Stack trace:" >> "$LOG_ROOT"
echo "#wil be stored as s3://bucket/database/$(date +%a).sql.gz" >> "$LOG_ROOT"
mysqldump --Host=$Host --user=$USER --password=$PASSWORD $DB_NAME --routines --single-transaction | gzip -9 | aws s3 cp - $S3BUCKET
$TSTAMPEND=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$TSTAMPEND] MYSQL_Dump.INFO: MySQL Dump finished." >> "$LOG_ROOT"
echo "Stack trace:" >> "$LOG_ROOT"
echo "#Backup stored at s3://bucket/database/$(date +%a).sql.gz" >> "$LOG_ROOT"
毎日のバックアップ用のCronjobを作成する
#crontab -e
0 0 * * * bash /home/ec2-user/s3/mysql.sh to >/dev/null 2>&1
#midnight 12 daily
-
は、ソースパラメータのstdinを読み取る必要があることをs3cmdに示すために機能します。あなたが中間ステップでそれを行うことができなかった
mysqldump -u root -ppassword -all-databases | gzip -9 >tmp.file && s3cmd put tmp.file s3://bucket/sql/databases.sql.gz ... && rm tmp.file
これにより、出力がtmp.fileに圧縮され、成功した場合は(&&
)ファイルをs3に配置し、それが成功した場合は一時ファイルを削除します。