如何使用 Cron 选项卡每晚获取 MySQL 数据库备份并将其放入 Amazon s3 中?

maa*_*aaz 5 mysql backup crontab

我在 Rackspace 有一台服务器,我已经在每天晚上运行一个 cron 作业来处理一些事情......(一些与帐户相关的操作 - 会在每半夜给我发送电子邮件)。我的应用程序在 grails 上很流行。现在我想在每个午夜进行 mysql 数据库(称为 myfleet)备份并将该文件放在 Amezon S3 中。我怎样才能做到这一点?我是否需要编写任何 java 或 groovy 文件来处理它?还是可以从 Linux 机器本身完成?我已经在 Amezon S3 中获得了帐户(存储桶名称是fleetBucket)

小智 11

mysqldump --host=$HOST --user=$USER --password=$PASSWORD $DB_NAME --routines --single-transaction | gzip -9 | aws s3 cp - s3://bucket/database/filename.sql.gz
Run Code Online (Sandbox Code Playgroud)

将直接将文件存储到s3。


Fra*_*itt 7

应该非常简单:
- 使用 mysqldump 备份数据库

mysqldump -u [uname] -p[pass] myfleet | gzip -9 > myfleet.sql.gz  
Run Code Online (Sandbox Code Playgroud)

- 使用命令行客户端将转储文件上传到 S3(例如http://s3tools.org/s3cmd
s3cmd put myfleet.sql.gz s3://<bucketname>/myfleet.sql.gz

只需将其添加到您的 cron 作业中(您可能希望对转储文件使用某种编号方案,以防您想保留多个版本)。


Sam*_*ley 7

您还可以使用 STDOUT 和AWS CLI 工具将 mysqldump 的输出直接通过管道传输到 S3:

mysqldump -h [db_hostname] -u [db_user] -p[db_passwd] [databasename] | aws s3 cp - s3://[s3_bucketname]/[mysqldump_filename]
Run Code Online (Sandbox Code Playgroud)

例如:

mysqldump -h localhost -u db_user -ppassword test-database | aws s3 cp - s3://database-mysqldump-bucket/test-database-dump.sql
Run Code Online (Sandbox Code Playgroud)

mysqldump 命令默认输出到 STDOUT。using-作为输入参数aws s3 cp告诉 AWS CLI 工具使用 STDIN 作为输入。