本文是在 Linux 服务器上进行的。

在使用 cron 将过去 7 天的 mysqldump 自动备份到 Amazon S3,下面是具体步骤。

首先在物理服务器上对mysqldump的结果进行logrotating等操作,保留7天,毕竟是比生命更重要的数据库备份,所以要安全的存储在外部。

1.准备

您必须在服务器上安装awscli才能保存到 S3 。

例如,Ubuntu (18.04) 可以使用 apt 轻松安装。

$ sudo apt update
$ sudo apt install awscli -y

2.设置时区为CST

许多 Linux 发行版默认使用 UTC 作为时区。

让我们将时区更改为 CST,以便在预期的时间执行 cron 任务。

如果您使用的是 Ubuntu (18.04),可以使用timedatectl命令轻松更改此设置。

$ sudo timedatectl set-timezone Asia/Shanghai
$ timedatectl
Local time: Tue 2020-02-04 08:38:12 CST
Universal time: Mon 2020-02-03 23:38:12 UTC
RTC time: Mon 2020-02-03 23:38:13
Time zone: Asia/Shanghai (CST, +0900)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

3.设置cron

现在我们准备好了,让我们定义我们的 cron 任务。

/etc/cron.d/mysqldump-s3

0 0 * * * {执行用户} mysqldump -u{DB用户} -p{DB密码} {数据库名称} > mysqldump.sql && tar zcf mysqldump.tar.gz mysqldump.sql && aws s3 cp mysqldump.tar.gz s3://{时段名称}/mysqldump.date +\%u.tar.gz && rm mysqldump.sql mysqldump.tar.gz

解释:

每天 00:00
运行 mysqldump
带有 gzip 的压缩包
date +%u使用命令将日期名称包含在文件名中上传到S3
删除不需要的输出文件

+%u请注意,通过编写+\%u来转义 。%如果没有转义,会被当成crontab%中的命令结束,不能正常工作。

顺便说一句crond,您不需要重新启动服务。

如果要备份“最近14天”,可以组装一个输出1到14的命令。

具体可以执行以下操作。

aws s3 cp mysqldump.tar.gz s3://{时段名称}/$((date +\%-d \% 14)).tar.gz

aws s3 cp mysqldump.tar.gz s3://{时段名称}/$(expr date +\%-d \% 14).tar.gz

4.結果

这是 S3 实际执行此操作的屏幕截图。最近 7 天的数据库备份每天更新

5.总结

将数据库备份存储在 S3 等外部存储中是有必要的。

更多文章,请持续关注《MySql教程网》https://mysql360.com