
appleboy/docker-backup-databasedocker-backup-database是一个用于定期备份数据库的Docker镜像,支持将MySQL或Postgres数据库备份到本地磁盘或S3存储(包括AWS S3和Minio)。该镜像提供了灵活的配置选项,可通过环境变量设置备份调度、数据库连接和存储目标,适用于需要自动化数据库备份的场景。
不同数据库版本对应以下镜像标签:
appleboy/docker-backup-database:postgres-9appleboy/docker-backup-database:postgres-10appleboy/docker-backup-database:postgres-11appleboy/docker-backup-database:postgres-12appleboy/docker-backup-database:postgres-13appleboy/docker-backup-database:mysql-5.6appleboy/docker-backup-database:mysql-5.7appleboy/docker-backup-database:mysql-8使用docker-compose部署Minio(S3兼容存储)和Postgres数据库服务:
yamlservices: minio: image: minio/minio:edge volumes: - data1-1:/data1 ports: - 9000:9000 environment: MINIO_ACCESS_KEY: *** MINIO_SECRET_KEY: *** command: server /data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 postgres: image: postgres:12 restart: always volumes: - pg-data:/var/lib/postgresql/data logging: options: max-size: "100k" max-file: "3" environment: POSTGRES_USER: db POSTGRES_DB: db POSTGRES_PASSWORD: db volumes: data1-1: pg-data:
添加备份服务到docker-compose,将Postgres数据库备份到Minio S3存储:
yamlbackup_postgres: image: appleboy/docker-backup-database:postgres-12 logging: options: max-size: "100k" max-file: "3" environment: # 存储配置 STORAGE_DRIVER: s3 STORAGE_ENDPOINT: minio:9000 STORAGE_BUCKET: test STORAGE_REGION: ap-northeast-1 STORAGE_PATH: backup_postgres STORAGE_SSL: "false" STORAGE_INSECURE_SKIP_VERIFY: "false" ACCESS_KEY_ID: *** SECRET_ACCESS_KEY: *** # 数据库配置 DATABASE_DRIVER: postgres DATABASE_HOST: postgres:5432 DATABASE_USERNAME: db DATABASE_PASSWORD: db DATABASE_NAME: db DATABASE_OPTS:
添加定时任务调度,设置每日备份(以MySQL为例):
yamlbackup_mysql: image: appleboy/docker-backup-database:mysql-8 logging: options: max-size: "100k" max-file: "3" environment: # 存储配置 STORAGE_DRIVER: s3 STORAGE_ENDPOINT: minio:9000 STORAGE_BUCKET: test STORAGE_REGION: ap-northeast-1 STORAGE_PATH: backup_mysql STORAGE_SSL: "false" ACCESS_KEY_ID: *** SECRET_ACCESS_KEY: *** # 数据库配置 DATABASE_DRIVER: mysql DATABASE_HOST: mysql:3306 DATABASE_USERNAME: root DATABASE_PASSWORD: db DATABASE_NAME: db DATABASE_OPTS: # 定时任务配置 TIME_SCHEDULE: @daily # 每日执行 TIME_LOCATION: Asia/Taipei # 时区
使用MinIO Client (mc) 配置备份文件自动过期策略(保留7天):
sh# 导入生命周期配置 mc ilm import minio/test <<EOF { "Rules": [ { "Expiration": { "Days": 7 }, "ID": "backup_postgres", "Filter": { "Prefix": "backup_postgres/" }, "Status": "Enabled" } ] } EOF # 查看当前生命周期配置 mc ilm ls minio/test
支持cron表达式或预定义调度:
# ┌───────────── 分钟 (0 - 59) # │ ┌───────────── 小时 (0 - 23) # │ │ ┌───────────── 日 (1 - 31) # │ │ │ ┌───────────── 月 (1 - 12) # │ │ │ │ ┌───────────── 星期 (0 - 6,0为周日) # │ │ │ │ │ # * * * * * <命令>
| 配置 | 描述 | 等效Cron表达式 |
|---|---|---|
| @yearly | 每年执行(1月1日午夜) | 0 0 1 1 * |
| @monthly | 每月执行(每月1日午夜) | 0 0 1 * * |
| @weekly | 每周执行(周日午夜) | 0 0 * * 0 |
| @daily | 每日执行(午夜) | 0 0 * * * |
| @hourly | 每小时执行(整点) | 0 * * * * |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| DATABASE_DRIVER | 数据库类型,支持postgres或mysql | postgres |
| DATABASE_USERNAME | 数据库用户名 | - |
| DATABASE_PASSWORD | 数据库密码 | - |
| DATABASE_NAME | 数据库名称 | - |
| DATABASE_HOST | 数据库地址(主机:端口) | - |
| DATABASE_OPTS | 备份命令额外参数(如pg_dump/mysqldump选项) | - |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| STORAGE_DRIVER | 存储类型,支持s3或disk | s3 |
| ACCESS_KEY_ID | S3访问密钥ID(Minio/AWS S3) | - |
| SECRET_ACCESS_KEY | S3密钥 | - |
| STORAGE_ENDPOINT | S3服务端点 | s3.amazonaws.com |
| STORAGE_BUCKET | S3桶名称 | - |
| STORAGE_REGION | S3区域 | ap-northeast-1 |
| STORAGE_PATH | 存储路径(桶内文件夹) | backup |
| STORAGE_SSL | 是否启用SSL | false |
| STORAGE_INSECURE_SKIP_VERIFY | 是否跳过SSL证书验证 | false |
| 环境变量 | 描述 | 默认值 |
|---|---|---|
| TIME_SCHEDULE | 定时任务表达式(cron或预定义调度) | - |
| TIME_LOCATION | 时区 | 本地时区 |
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务