如何pipe理一个mysql转储到s3cmd

我想将一个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' 

我怎样才能做到这一点?

这是可能的s3cmd 1.5+( 链接 ):
$ mysqldump ... | s3cmd put - s3://bucket/file-name.sql

您错过了要启动备份的实际文件。

 s3cmd put /backup_dir/somefile.sql.gz s3://bucket/sql/ 

s3cmd需要两个基本参数,文件和要备份的存储桶。

其次,我不能赞扬以下内容,但它基本上是用中间脚本来做你想要的。 基本上,使用以下命令创build一个bak.sh文件,然后该shell脚本将通过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 

你可以尝试使用-指示s3cmd它应该读取源参数的标准input,它可能工作。 如果没有,你可以做一个中间步骤

 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然后如果这是成功的,它会删除临时文件。