如何将 mysql 转储通过管道传输到 s3cmd

zen*_*sys 7 mysql backup amazon-s3 pipe s3cmd

我想将压缩的 mysql 转储传输到 s3。

我试过:

mysqldump -u root -ppassword -all-databases | gzip -9 | s3cmd put s3://bucket/sql/databases.sql.gz
Run Code Online (Sandbox Code Playgroud)

但后来我得到:

ERROR: Not enough paramters for command 'put'
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点(在一行中)?

小智 20

这可以通过s3cmd1.5+(链接)实现:
$ mysqldump ... | s3cmd put - s3://bucket/file-name.sql

  • 作为补充说明 - 在实践中通过压缩器“双管”可能会更好:`mysqldump ... | gzip | s3cmd put - s3://bucket/file.sql.gz`,节省 80+% 的 S3 存储成本。成功使用此构造将 TB 级的 vSphere 备份上传到 S3,无需本地存储:) (4认同)

Tra*_*oll 1

您缺少要开始备份的实际文件。

s3cmd put /backup_dir/somefile.sql.gz s3://bucket/sql/
Run Code Online (Sandbox Code Playgroud)

s3cmd 也采用两个基本参数:文件和要备份的存储桶。

其次,我不能相信以下内容,但它基本上用中间脚本做你想做的事情。基本上,使用以下内容创建一个 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
Run Code Online (Sandbox Code Playgroud)