如果你采用的是本地数据库备份,那么我强烈建议你使用异地数据库备份,本地备份的危险性不需要多说,前期搭建的minio拿来备份是一个不错的选择,除了minio以外,你依旧可以把备份文件上传到任意第三方存储平台,具体方法如下。
备份工具
备份工具我选择的是rclone,此工具异常强大和稳定,而且免费,大佬们都在用。Linux安装方法如下。
在服务器中安装rclone和zip:
curl https://rclone.org/install.sh | sudo bash
apt install zip -y
创建rclone配置文件夹
mkdir -p ~/.config/rclone/
新建配置文件:
nano ~/.config/rclone/rclone.conf
rclone配置文件
这个配置文件里面填写的内容就是存储平台,可以是aws的s3存储,也可以是Scaleway,更可以是minio,他支持的存储平台有这些,我就不一一列举了。我就以minio和Scaleway作为存储例子,其他的自己变换就好了。
Scaleway填入下列内容:
[scaleway]
type = s3
provider = Scaleway
access_key_id = 你的ACCESS KEY
secret_access_key = 你的SECRET KEY
region = nl-ams(根据你bucket选择的地区,法国fr-par,荷兰nl-ams,波兰pl-waw)
endpoint = s3.nl-ams.scw.cloud (同上)
acl = private
minio填入下列内容:
[minio]
type = s3
provider = Minio
env_auth = false
access_key_id = USWUXHGYZQYFYFFIT3RE
secret_access_key = MOJRH0mkL1IPauahWITSVvyDrQbEEIwljvmxdq03
region = us-east-1
endpoint = http://192.168.1.106:9000
location_constraint =
server_side_encryption =
保存。region = us-east-1 根据你minio填写的实际地区进行填写
备份脚本
然后创建脚本
nano /backup.sh
输入
#!/bin/bash
source /etc/profile
now=$(date "+%Y%m%d-%H%M%S")
origin="/home/mastodon/mastodon"
target="minio:你的bucket名字"
echo `date +"%Y-%m-%d %H:%M:%S"` " now starting export"
/usr/bin/docker exec pg容器名 pg_dump -U postgres -Fc mastodon_production > ${origin}/backup.dump &&
echo `date +"%Y-%m-%d %H:%M:%S"` " succeed and upload to s3 now"
/usr/bin/zip -P 密码 ${origin}/backup_${now}.zip ${origin}/backup.dump &&
/usr/bin/rclone copy ${origin}/backup_${now}.zip ${target} &&
echo `date +"%Y-%m-%d %H:%M:%S"` " ok all done"
rm -f ${origin}/backup.dump ${origin}/backup_${now}.zip
/usr/bin/rclone --min-age 7d delete ${target}
pg容器名一般为mastodon_db_1(通过docker ps查看),密码为你设立的解压密码。mastodon_production为你的数据库名,可至.env.production
查看。
保存。
赋权:
chmod 751 /backup.sh
然后,
/backup.sh
试运行一下,看看Scaleway中有没有zip文件生成。如果出现zip文件且大小以mb计算,则成功。
自动备份计划
随后,设置定时任务:
crontab -e
如果没有安装crontab,请进行安装,下面是Debian安装命令
apt install cron
选择nano编辑器,
3 22 * * * /backup.sh >> /backup.log
具体时间自己设置,建议设置在半夜,注意服务器时区(通过date
查看服务器时间)。
crontab格式说明
分 时 日 月 星期 要运行的命令
- 第1列分钟0~59
- 第2列小时0~23(0表示子夜)
- 第3列日1~31
- 第4列月1~12
- 第5列星期0~7(0和7表示星期天)
- 第6列要运行的命令
上述命令解释为晚上22点03分运行/backup.sh脚本并输出备份日志
更新日期:2024年8月17日