头图
头图来自插画师 室埴ポコ

*关于用docker的typecho安装是参考这个:
【好玩儿的Docker项目】10分钟搭建一个Typecho博客|太破口!念念不忘,必有回响!*

然后就来到了关键的备份问题,有几种方案,这边介绍的是本地备份篇,内容参考自chatgpt。

在服务器上自动备份 Docker 数据

1. 创建备份脚本

首先,保证你处于root权限,然后在服务器上创建一个备份脚本。假设你要备份 MySQL 数据和 Typecho 文件。

创建备份脚本文件,例如 docker_backup.sh

nano /root/docker_backup.sh

将以下内容粘贴到脚本文件中:(ps:仔细看下面的内容,BACKUP_DIR 中填你 存放备份文件 的文件夹路径, MYSQL_CONTAINER 和 TYPECHO_CONTAINER 中填入你的你的 MYSQL容器 和 typecho容器)

#!/bin/bash
# 设置变量
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/root/docker_data/backups"
MYSQL_CONTAINER="你的MYSQL容器"
TYPECHO_CONTAINER="你的typecho容器"
MYSQL_BACKUP="${BACKUP_DIR}/mysql_backup_${DATE}.sql"
TYPECHO_BACKUP="${BACKUP_DIR}/typecho_backup_${DATE}.tar.gz"

# 创建备份目录(如果不存在)
mkdir -p ${BACKUP_DIR}

# 备份 MySQL 数据库
dodocker exec ${MYSQL_CONTAINER} /usr/bin/mysqldump --defaults-extra-file=/root/data/docker_data/typecho/mysql/.my.cnf typecho > ${MYSQL_BACKUP}

# 备份 Typecho 文件
docker exec ${TYPECHO_CONTAINER} tar czf - -C /var/www/html . > ${TYPECHO_BACKUP}

# 保留最近7天的备份,想保留多几天就把7改成你想要的数字就行
find ${BACKUP_DIR} -type f -mtime +7 -name '*.sql' -exec rm {} \;
find ${BACKUP_DIR} -type f -mtime +7 -name '*.tar.gz' -exec rm {} \;

保存并关闭文件。

2. 设置脚本权限

执行以下代码使脚本文件可执行:

chmod +x /root/docker_backup.sh

3. 使用 Cron 作业安排每日备份

编辑 crontab 文件以安排每日备份:

crontab -e

添加以下行以每天凌晨2点执行备份脚本,3点执行就把2改成3就行:

0 2 * * * /root/docker_backup.sh

保存并退出编辑器。

3. 设置脚本权限

使脚本文件可执行:

chmod +x /root/transfer_backups.sh

验证备份

确保你的服务器和 PC 已正确配置 SSH,并且能够通过 SSH 连接。你可以手动运行下面脚本来验证备份过程:

./root/docker_backup.sh

运行完后去你之前填的BACKUP_DIR文件夹中找找有没有mysql_backup_备份的日期.sql typecho_backup_备份的日期.tar.gz 这两个文件,这就是你的备份文件了。

如果找不到文件夹在哪里了可以进行模糊搜索:

 find / -name mysql_backup*

通过这些步骤,你可以实现每日自动备份 Docker 数据。确保定期检查备份文件的完整性和传输日志,以防止任何意外问题。

如果要恢复这些备份文件,就照着前面那些备份的位置,反向将备份数据解压回原路径并覆盖即可,如果服务器迁移的情况需要重新建立容器等,请将这篇文章粘贴给GPT然后询问,那边有详细的手把手教学。