{"id":45690932,"url":"https://github.com/caomeiyouren/auto-backup-database","last_synced_at":"2026-04-02T14:01:22.082Z","repository":{"id":340391563,"uuid":"1165833377","full_name":"CaoMeiYouRen/auto-backup-database","owner":"CaoMeiYouRen","description":"服务器数据库自动备份方案，支持本地备份和异地备份","archived":false,"fork":false,"pushed_at":"2026-03-26T07:22:02.000Z","size":562,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-27T02:34:26.888Z","etag":null,"topics":["backup","database","mongodb","mysql","postgresql","sqlite","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CaoMeiYouRen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://afdian.com/a/CaoMeiYouRen"]}},"created_at":"2026-02-24T15:41:10.000Z","updated_at":"2026-03-26T07:21:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CaoMeiYouRen/auto-backup-database","commit_stats":null,"previous_names":["caomeiyouren/auto-backup-database"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/CaoMeiYouRen/auto-backup-database","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaoMeiYouRen%2Fauto-backup-database","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaoMeiYouRen%2Fauto-backup-database/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaoMeiYouRen%2Fauto-backup-database/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaoMeiYouRen%2Fauto-backup-database/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CaoMeiYouRen","download_url":"https://codeload.github.com/CaoMeiYouRen/auto-backup-database/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaoMeiYouRen%2Fauto-backup-database/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307459,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","database","mongodb","mysql","postgresql","sqlite","typescript"],"created_at":"2026-02-24T17:10:57.335Z","updated_at":"2026-04-02T14:01:22.073Z","avatar_url":"https://github.com/CaoMeiYouRen.png","language":"TypeScript","funding_links":["https://afdian.com/a/CaoMeiYouRen"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eauto-backup-database\u003c/h1\u003e\n\u003cp\u003e\n  \u003cimg alt=\"Version\" src=\"https://img.shields.io/github/package-json/v/CaoMeiYouRen/auto-backup-database.svg\" /\u003e\n  \u003ca href=\"https://hub.docker.com/r/caomeiyouren/auto-backup-database\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/caomeiyouren/auto-backup-database\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/CaoMeiYouRen/auto-backup-database/actions?query=workflow%3ARelease\" target=\"_blank\"\u003e\n    \u003cimg alt=\"GitHub Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/CaoMeiYouRen/auto-backup-database/release.yml?branch=master\"\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/node-%3E%3D20-blue.svg\" /\u003e\n  \u003ca href=\"https://github.com/CaoMeiYouRen/auto-backup-database#readme\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Documentation\" src=\"https://img.shields.io/badge/documentation-yes-brightgreen.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/CaoMeiYouRen/auto-backup-database/graphs/commit-activity\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Maintenance\" src=\"https://img.shields.io/badge/Maintained%3F-yes-green.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/CaoMeiYouRen/auto-backup-database/blob/master/LICENSE\" target=\"_blank\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/github/license/CaoMeiYouRen/auto-backup-database?color=yellow\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003e 服务器数据库自动备份方案，支持本地备份和异地备份（OSS/S3）\n\n## 功能特性\n\n- **多数据库支持**: SQLite、MongoDB、PostgreSQL、MySQL\n- **Glob 匹配**: 支持 Glob 语法批量匹配数据库文件\n- **压缩加密**: 自动压缩备份文件，支持可选的密码加密\n- **本地 + 远程存储**: 同时支持本地备份和 OSS/S3 远程备份\n- **生命周期管理**: 按天数和总大小自动清理旧备份\n- **定时调度**: 基于 Cron 表达式的定时任务调度\n- **消息通知**: 支持多种推送渠道（微信、钉钉、飞书等）\n\n## 依赖要求\n\n- Node.js \u003e= 20\n- tar（用于压缩）\n- openssl（用于加密，可选）\n- MongoDB Database Tools（仅在启用 MongoDB 备份时需要；Docker 镜像内已预装，宿主机部署需自行安装并确保 `mongodump` 可执行）\n- MySQL Client Tools（仅在启用 MySQL 备份时需要；Docker 镜像内已预装，宿主机部署需自行安装并确保 `mysqldump` 可执行）\n- PostgreSQL Client Tools（仅在启用 PostgreSQL 备份时需要；Docker 镜像内已预装，宿主机部署需自行安装并确保 `pg_dump` 可执行）\n\n## 安装\n\n```bash\n# 使用 pnpm\npnpm install\n\n# 使用 npm\nnpm install\n```\n\n## 配置\n\n### 1. 创建配置文件 `config.yml`\n\n```yaml\noss:\n  region: \"${OSS_REGION}\"\n  accessKeyId: \"${OSS_ACCESS_KEY_ID}\"\n  accessKeySecret: \"${OSS_ACCESS_KEY_SECRET}\"\n  bucket: \"${OSS_BUCKET}\"\n  endpoint: \"${OSS_ENDPOINT}\"\n\nsecurity:\n  backupPassword: \"${BACKUP_PASSWORD}\"\n\nprojects:\n  - name: my-app-db\n    dbType: sqlite\n    dbPath: \"/data/apps/my-app/*.db\" # 支持 Glob 语法\n    backupSchedule: \"0 2 * * *\" # 每天凌晨 2 点\n    compress:\n      enabled: true\n      password: true # 使用环境变量中的 BACKUP_PASSWORD 加密\n    retention:\n      local:\n        days: 7\n        maxSize: 2GB\n      remote:\n        days: 30\n        maxSize: 10GB\n    options:\n      localEnabled: true\n      remoteEnabled: true\n\n  - name: mongo-prod\n    dbType: mongodb\n    connection:\n      uri: \"${MONGODB_URI}\"\n      database: \"${MONGODB_DATABASE:-app}\"\n    dumpOptions:\n      archive: true\n      authenticationDatabase: \"${MONGODB_AUTH_DB:-admin}\"\n      extraArgs: []\n    backupSchedule: \"0 3 * * *\"\n    compress:\n      enabled: true\n      password: true\n    retention:\n      local:\n        days: 7\n        maxSize: 5GB\n      remote:\n        days: 30\n        maxSize: 20GB\n    options:\n      localEnabled: true\n      remoteEnabled: true\n\n  - name: mysql-prod\n    dbType: mysql\n    connection:\n      uri: \"${MYSQL_URI}\"\n      database: \"${MYSQL_DATABASE:-app}\"\n    dumpOptions:\n      singleTransaction: true\n      quick: true\n      routines: true\n      events: true\n      extraArgs: []\n    backupSchedule: \"0 3 * * *\"\n    compress:\n      enabled: true\n      password: true\n    retention:\n      local:\n        days: 7\n        maxSize: 5GB\n      remote:\n        days: 30\n        maxSize: 20GB\n    options:\n      localEnabled: true\n      remoteEnabled: true\n\n  - name: postgres-prod\n    dbType: postgresql\n    connection:\n      uri: \"${POSTGRESQL_URI}\"\n      database: \"${POSTGRESQL_DATABASE:-app}\"\n    dumpOptions:\n      format: custom\n      compression: 0\n      noOwner: true\n      extraArgs: []\n    backupSchedule: \"0 4 * * *\"\n    compress:\n      enabled: true\n      password: true\n    retention:\n      local:\n        days: 7\n        maxSize: 5GB\n      remote:\n        days: 30\n        maxSize: 20GB\n    options:\n      localEnabled: true\n      remoteEnabled: true\n\n# 通知配置（可选）\nnotify:\n  enabled: true\n  type: Dingtalk # 支持多种推送方式，详见 push-all-in-one\n  config:\n    DINGTALK_ACCESS_TOKEN: \"${DINGTALK_ACCESS_TOKEN}\"\n    DINGTALK_SECRET: \"${DINGTALK_SECRET}\"\n```\n\n### 2. 创建环境变量文件 `.env`\n\n```env\n# OSS 配置（支持阿里云 OSS、腾讯云 COS、AWS S3 等）\nOSS_REGION=oss-cn-hangzhou\nOSS_ACCESS_KEY_ID=your-access-key-id\nOSS_ACCESS_KEY_SECRET=your-access-key-secret\nOSS_BUCKET=your-bucket-name\nOSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com\n\n# 备份加密密码（可选）\nBACKUP_PASSWORD=your-secure-password\n\n# MongoDB（可选）\nMONGODB_URI=mongodb://username:password@127.0.0.1:27017/app?authSource=admin\nMONGODB_DATABASE=app\nMONGODB_AUTH_DB=admin\n\n# MySQL（可选）\nMYSQL_URI=mysql://root:password@127.0.0.1:3306\nMYSQL_DATABASE=app\n\n# PostgreSQL（可选）\nPOSTGRESQL_URI=postgresql://postgres:password@127.0.0.1:5432\nPOSTGRESQL_DATABASE=app\n\n# 通知配置（可选）\nDINGTALK_ACCESS_TOKEN=your-token\nDINGTALK_SECRET=your-secret\n```\n\n### 3. MongoDB 备份说明\n\nMongoDB 备份计划基于官方 `mongodump` 工具实现：\n\n- Docker 部署时，镜像内预装 MongoDB Database Tools，无需额外安装。\n- 非 Docker 部署时，需要自行安装 MongoDB Database Tools，并确保 `mongodump --version` 可以直接执行。\n- 配置文件中的敏感值统一通过占位符从 `.env` 注入，避免在 `config.yml` 与 `.env` 之间维护两套配置结构。\n\n### 4. MySQL 备份说明\n\nMySQL 备份基于官方 `mysqldump` 工具实现：\n\n- Docker 部署时，镜像内预装 `mariadb-client` 与 `mariadb-connector-c`，默认优先调用 `mysqldump`，仅在缺失时回退到 `mariadb-dump`。\n- 非 Docker 部署时，需要自行安装 MySQL Client Tools，并确保 `mysqldump --version` 可以直接执行。\n- 当前实现默认输出单个 `.sql` 逻辑备份文件，并复用现有压缩、加密、本地存储和远程上传流程。\n- 单项目支持 3 种目标模式：单数据库、显式多数据库和 `dumpOptions.allDatabases`；若配置 `dumpOptions.tables`，则只能用于单数据库场景。\n- 推荐在 InnoDB 场景下启用 `dumpOptions.singleTransaction: true` 与 `dumpOptions.quick: true`，减少锁表影响并改善大表导出行为。\n- `connection.uri` 中仅会转换少量已知兼容的查询参数，如 `ssl-mode`、`tls`、`tls-version`、`ssl-ca`、`ssl-cert`、`ssl-key`、`charset`；其他应用层 DSN 参数会被忽略。如需显式传递 CLI 参数，请使用 `dumpOptions.extraArgs`。\n- 如果 MySQL 8 实例使用默认的 `caching_sha2_password` 认证方式，Docker/Alpine 环境必须确保安装了 `mariadb-connector-c`，否则会报缺少 `caching_sha2_password.so` 插件的连接错误。\n- 若 TiDB Cloud 返回 `usage quota being exhausted`，说明实例配额已耗尽，属于服务端限制，需提升额度或等待恢复后再重试。\n\n### 5. PostgreSQL 备份说明\n\nPostgreSQL 备份基于官方 `pg_dump` 工具实现：\n\n- Docker 部署时，镜像内预装 PostgreSQL Client Tools，无需额外安装。\n- 非 Docker 部署时，需要自行安装 PostgreSQL Client Tools，并确保 `pg_dump --version` 可以直接执行。\n- 默认使用单文件 `custom` 格式导出，便于后续通过 `pg_restore` 做选择性恢复。\n- 当项目级 `compress.enabled` 开启时，默认关闭 `pg_dump` 内置压缩，避免重复压缩；若显式设置 `dumpOptions.compression \u003e 0`，将被视为配置冲突。\n- PostgreSQL 备份必须提供数据库名，可以放在 `connection.uri` 中，也可以通过 `connection.database` 单独指定。\n\n## 使用\n\n### 命令行\n\n```bash\n# 启动调度器（默认模式）\npnpm run start\n\n# 单次执行所有项目备份\npnpm run start -- -m once\n\n# 单次执行指定项目备份\npnpm run start -- -m once -p my-app-db\n\n# 指定配置文件\npnpm run start -- -c /path/to/config.yml -e /path/to/.env\n```\n\n### 命令行参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `-c, --config \u003cpath\u003e` | 配置文件路径 | `config.yml` |\n| `-e, --env \u003cpath\u003e` | 环境变量文件路径 | `.env` |\n| `-o, --output \u003cpath\u003e` | 本地备份目录 | `./backups` |\n| `-m, --mode \u003cmode\u003e` | 运行模式: `once` 或 `schedule` | `schedule` |\n| `-p, --project \u003cname\u003e` | 指定项目名称（单次模式） | - |\n| `-h, --help` | 显示帮助信息 | - |\n\n## Docker 部署\n\n### 使用 docker-compose\n\n```bash\n# 构建并启动\ndocker-compose up -d\n\n# 查看日志\ndocker-compose logs -f\n```\n\n### 手动构建\n\n```bash\n# 构建镜像\ndocker build -t auto-backup-database .\n\n# 运行容器\ndocker run -d \\\n  --name auto-backup-database \\\n  -v $(pwd)/config:/app/config:ro \\\n  -v $(pwd)/backups:/app/backups \\\n  -v /path/to/databases:/app/data:ro \\\n  auto-backup-database\n```\n\n## 开发\n\n```bash\n# 开发模式\npnpm run dev\n\n# 构建\npnpm run build\n\n# 代码检查\npnpm run lint\n\n# 运行测试\npnpm run test\n\n# 提交代码\npnpm run commit\n```\n\n## 项目结构\n\n```\nsrc/\n├── cli.ts              # CLI 入口\n├── index.ts            # 模块导出\n├── config/\n│   └── loader.ts       # 配置加载器\n├── providers/\n│   ├── database.ts     # 数据库提供者抽象类\n│   ├── mongodb.ts      # MongoDB 提供者\n│   ├── mysql.ts        # MySQL 提供者\n│   ├── postgresql.ts   # PostgreSQL 提供者\n│   └── sqlite.ts       # SQLite 提供者\n├── services/\n│   ├── backup.ts       # 备份服务\n│   └── scheduler.ts    # 调度服务\n├── storage/\n│   ├── local.ts        # 本地存储\n│   └── oss.ts          # OSS 存储\n├── notify/\n│   └── index.ts        # 通知服务\n├── types/\n│   └── config.ts       # 配置类型定义\n└── utils/\n    ├── compress.ts     # 压缩工具\n    └── encrypt.ts      # 加密工具\n```\n\n## 作者\n\n**CaoMeiYouRen**\n\n* GitHub: [@CaoMeiYouRen](https://github.com/CaoMeiYouRen)\n\n## 贡献\n\n欢迎贡献、提问或提出新功能！请查看 [issues page](https://github.com/CaoMeiYouRen/auto-backup-database/issues) 或 [contributing guide](https://github.com/CaoMeiYouRen/auto-backup-database/blob/master/CONTRIBUTING.md)。\n\n## 支持\n\n如果觉得这个项目有用的话请给一颗⭐️，非常感谢\n\n\u003ca href=\"https://afdian.com/@CaoMeiYouRen\"\u003e\n  \u003cimg src=\"https://oss.cmyr.dev/images/202306192324870.png\" width=\"312px\" height=\"78px\" alt=\"在爱发电支持我\"\u003e\n\u003c/a\u003e\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=CaoMeiYouRen/auto-backup-database\u0026type=Date)](https://star-history.com/#CaoMeiYouRen/auto-backup-database\u0026Date)\n\n\n## License\n\nCopyright © 2026 [CaoMeiYouRen](https://github.com/CaoMeiYouRen).\u003cbr /\u003e\nThis project is [MIT](https://github.com/CaoMeiYouRen/auto-backup-database/blob/master/LICENSE) licensed.\n\n***\n_This README was generated with ❤️ by [cmyr-template-cli](https://github.com/CaoMeiYouRen/cmyr-template-cli)_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaomeiyouren%2Fauto-backup-database","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaomeiyouren%2Fauto-backup-database","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaomeiyouren%2Fauto-backup-database/lists"}