每天在 aws s3 存储桶上自动备份数字海洋服务器

Nik*_*ble 3 backup ubuntu amazon-s3 database-backups digital-ocean

我有带有文件和 MySQL 数据库的数字海洋水滴,并且希望每天(即每个午夜)将其备份到 aws s3 存储桶上

Nik*_*ble 7

使用 root 访问权限登录您的 Droplet

1.//首先安装awscli

apt install awscli
Run Code Online (Sandbox Code Playgroud)

2. //创建S3存储桶并提供以下详细信息

aws configure

AWS Access Key ID [None]: {enter your access key id}         
AWS Secret Access Key [None]: {enter your secret access key} 
Default region name [None]: {enter your preferred region}    
Default output format [None]: {enter your preferred format} 
Run Code Online (Sandbox Code Playgroud)

3.//测试连接是否正常?

aws s3 cp file.zip s3://{bucket_name}
Run Code Online (Sandbox Code Playgroud)

4.//创建实际脚本(backup.sh)

#!/bin/sh

# Database credentials
DATABASE="database-name"
USERNAME="database_user"
PASSWORD="password"

# Directory to back up
SOURCE_DIR= Files_path_here

# Target
TARGET_DIR=/backup
TARGET_BUCKET= Bucket-name

# Output files
NOW=$(date +"%Y_%m_%d_%H_%M_%S")
DB_OUTPUT=$TARGET_DIR/db.$NOW.sql.gz
FILES_OUTPUT=$TARGET_DIR/files.$NOW.zip

# Back up files
zip -r $FILES_OUTPUT $SOURCE_DIR

# Back up database
mysqldump -u $USERNAME -p"$PASSWORD" $DATABASE --single-transaction | gzip > $DB_OUTPUT

# Upload to S3
aws s3 cp $DB_OUTPUT s3://$TARGET_BUCKET
aws s3 cp $FILES_OUTPUT s3://$TARGET_BUCKET

# Remove files older than 14 days
find $TARGET_DIR -type f -mtime +14 | xargs rm -f
Run Code Online (Sandbox Code Playgroud)

5.//授予权限

chmod 700 backup.sh
Run Code Online (Sandbox Code Playgroud)

6.//将此bash文件(即backup.sh)转换为linux兼容的

sed -i -e 's/\r$//' backup.sh
Run Code Online (Sandbox Code Playgroud)

7.// 通过从命令行运行备份来测试备份:

./backup.sh
Run Code Online (Sandbox Code Playgroud)

8.//以下命令编辑crontab

crontab -e
Run Code Online (Sandbox Code Playgroud)

9.在底部添加以下行:

0 22 * * * /path/to/backup.sh
Run Code Online (Sandbox Code Playgroud)