# mysql-backup-service **Repository Path**: qinyue/mysql-backup-service ## Basic Information - **Project Name**: mysql-backup-service - **Description**: mysql自动备份脚本 - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-05-24 - **Last Updated**: 2025-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MySQL 备份到阿里云 OSS Docker 服务 [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Alibaba Cloud](https://img.shields.io/badge/Alibaba%20Cloud-OSS-orange.svg)](https://www.alibabacloud.com/product/oss) 这是一个自动化的 MySQL/MariaDB 数据库备份工具,使用 Docker Compose 部署,可以定期备份数据库并将备份文件上传到阿里云对象存储服务 (OSS)。 ## 功能特点 - 📊 自动备份单个或多个 MySQL/MariaDB 数据库 - 🔄 定时执行备份任务,支持自定义 Cron 表达式 - 🗜️ 使用 gzip 压缩备份文件,节省存储空间 - ☁️ 自动上传备份到阿里云 OSS - 🧹 自动清理过期备份,支持自定义保留天数 - 🔌 支持连接 Docker 容器中的数据库或宝塔面板管理的数据库 - 🛡️ 完整的错误处理和日志记录 ## 系统要求 - Docker Engine 19.03.0+ - Docker Compose 1.27.0+ - 阿里云 OSS 账号和访问密钥 - MySQL/MariaDB 数据库(Docker 容器或宝塔面板管理) ## 快速开始 ### 1. 克隆仓库 ```bash git clone https://gitee.com/xiaoerlang12/mysql-backup-service.git cd /root/mysql-backup-service ``` ### 2. 运行设置向导 ```bash chmod +x setup.sh ./setup.sh ``` 根据提示选择您的数据库环境(宝塔面板或 Docker)并输入相关信息。 ### 3. 编辑环境配置 ```bash nano .env ``` 填写数据库凭据和阿里云 OSS 信息。 ### 4. 启动备份服务 ```bash docker compose up -d ``` ### 5. 查看运行状态和日志 ```bash docker ps docker logs mysql-backup-to-oss ``` ## 配置选项 所有配置选项都在 `.env` 文件中设置: | 参数 | 描述 | 示例值 | |------|------|--------| | DB_USER | 数据库用户名 | dbuser | | DB_PASSWORD | 数据库密码 | password | | DB_NAME | 数据库名称 | mydatabase | | DB_HOST | 数据库主机地址 | localhost 或容器名 | | DB_PORT | 数据库端口 | 3306 | | OSS_BUCKET | OSS 存储桶名称 | my-backup-bucket | | OSS_PATH | OSS 存储路径前缀 | mysql/backups/ | | OSS_ENDPOINT | OSS 访问端点 | oss-cn-hongkong.aliyuncs.com | | OSS_ACCESS_KEY | OSS 访问密钥 ID | LTAI5xxx | | OSS_SECRET_KEY | OSS 访问密钥密码 | v1o814xxx | | RETENTION_DAYS | 本地备份保留天数 | 7 | | CRON_SCHEDULE | 备份执行时间 (Cron 表达式) | 0 2 * * * | | RUN_ON_STARTUP | 启动时是否立即执行备份 | true/false | | TZ | 时区设置 | Asia/Shanghai | | DB_ENV_TYPE | 数据库环境类型 | docker 或 baota | | NETWORK_MODE | Docker 网络模式 | host 或 container:容器名 | | MARIADB_CONTAINER | MariaDB 容器名称 (仅 Docker 环境) | mariadb-1 | ## 备份文件格式 备份文件命名格式为 `数据库名_YYYYMMDD_HHMMSS.sql.gz`,存储在: - **本地路径**: `/backup` 目录(容器内) - **OSS 路径**: `oss://OSS_BUCKET/OSS_PATH/数据库名_YYYYMMDD_HHMMSS.sql.gz` ## 环境支持 ### Docker 环境 如果您的数据库运行在 Docker 容器中: - 使用 `DB_ENV_TYPE=docker` - 设置 `NETWORK_MODE=container:容器名` - 设置 `MARIADB_CONTAINER=容器名` ### 宝塔面板环境 如果您的数据库由宝塔面板管理: - 使用 `DB_ENV_TYPE=baota` - 设置 `NETWORK_MODE=host` - 设置 `DB_HOST=localhost` - 确保数据库允许本地连接 ## 手动触发备份 要手动触发备份过程: ```bash docker exec mysql-backup-to-oss /usr/local/bin/backup_script.sh ``` ## 恢复备份 从备份恢复数据库: 1. 从 OSS 下载备份文件 2. 解压缩备份文件:`gunzip 备份文件.sql.gz` 3. 恢复数据库:`mysql -u 用户名 -p 数据库名 < 备份文件.sql` ## 故障排除 ### 无法连接到数据库 - 检查数据库凭据是否正确 - 验证网络设置(container 或 host 模式) - 确保数据库允许从指定位置连接 ### 无法上传到 OSS - 验证 OSS 凭据和端点设置 - 检查 OSS 存储桶权限 - 查看容器日志了解详细错误信息 ### 备份不执行 - 检查 Cron 表达式格式 - 验证容器是否在运行:`docker ps` - 查看容器日志:`docker logs mysql-backup-to-oss` ## 安全建议 - 不要将包含真实凭据的 `.env` 文件提交到版本控制系统 - 为备份创建专用的数据库用户,只授予必要的权限 - 定期轮换 OSS 访问密钥 - 考虑对 OSS 存储桶启用加密 ## 贡献指南 欢迎提交 Pull Requests 或 Issues 以改进此项目。 ## 许可证 [MIT 许可证](LICENSE) ## 致谢 - [阿里云 OSS](https://www.alibabacloud.com/product/oss) - 对象存储服务 - [Docker](https://www.docker.com/) - 容器平台 - [MariaDB](https://mariadb.org/) / [MySQL](https://www.mysql.com/) - 数据库服务