# DatabaseBackup **Repository Path**: nimo2020/database-backup ## Basic Information - **Project Name**: DatabaseBackup - **Description**: 这是一个基于 .NET Core 8.0 的控制台应用程序,用于定时自动备份 MySQL 或 MSSQL 数据库,并自动备份到FTP目录中 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-07-16 - **Last Updated**: 2026-02-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 作者:林志松 日期:2024-06-12 # 数据库自动备份服务 这是一个基于 .NET 8.0 的控制台应用程序,用于定时自动备份 MySQL 或 MSSQL 数据库,支持多库、压缩加密、FTP 自动上传等功能。 ## 功能特性 - ✅ 支持 MySQL 和 MSSQL 多数据库定时备份 - ✅ 支持 FTP 自动上传备份文件 - ✅ 支持备份文件压缩与加密 - ✅ 使用 Quartz.NET 实现灵活的定时任务调度 - ✅ 从 appsettings.json 配置文件读取所有设置 - ✅ 备份文件名自定义,包含日期时间格式 - ✅ 自动清理超过指定天数的旧备份文件 - ✅ 使用依赖注入组织服务 - ✅ 完整的日志记录 - ✅ 生产环境就绪 ## 项目结构 ``` DatabaseBackup/ ├── Models/ │ ├── BackupSettings.cs # 备份设置模型 │ ├── DatabaseSettings.cs # 单库设置模型 │ ├── FtpSettings.cs # FTP上传设置模型 │ └── MultiDatabaseSettings.cs # 多库设置模型 ├── Services/ │ ├── CompressionService.cs # 备份压缩服务 │ ├── DatabaseBackupService.cs # 备份服务实现 │ ├── FtpUploader.cs # FTP上传实现 │ ├── IDatabaseBackupService.cs # 备份服务接口 │ └── QuartzHostedService.cs # Quartz 托管服务 ├── Jobs/ │ └── DatabaseBackupJob.cs # 备份任务 Job ├── Program.cs # 主程序入口 ├── appsettings.json # 配置文件 ├── DatabaseBackup.csproj # 项目文件 ├── install.bat # Windows一键安装脚本 ├── install.sh # Linux一键安装脚本 ├── install_service.bat # Windows服务安装脚本 ├── uninstall_service.bat # Windows服务卸载脚本 ├── DatabaseBackup.sln # 解决方案文件 └── README.md # 说明文档 ``` ## 安装和配置 ### 1. 安装 NuGet 包 ```bash # 安装 Quartz.NET dotnet add package Quartz --version 3.8.1 # 安装 Microsoft.Extensions.Hosting dotnet add package Microsoft.Extensions.Hosting --version 8.0.0 # 安装配置相关包 dotnet add package Microsoft.Extensions.Configuration --version 8.0.0 dotnet add package Microsoft.Extensions.Configuration.Json --version 8.0.0 dotnet add package Microsoft.Extensions.DependencyInjection --version 8.0.0 # 安装日志包 dotnet add package Microsoft.Extensions.Logging --version 8.0.0 dotnet add package Microsoft.Extensions.Logging.Console --version 8.0.0 # 安装数据库驱动 dotnet add package MySql.Data --version 8.3.0 dotnet add package Microsoft.Data.SqlClient --version 5.1.5 ``` ### 2. 配置 appsettings.json 示例: ```json { "BackupSettings": { "BackupPath": "C:\\DatabaseBackups", "RetentionDays": 30, "BackupFileNameFormat": "{0}-{1:yyyyMMddHHmm}.sql", "EnableCompression": true, "CompressionPassword": "your_backup_password_here" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "MultiDatabaseSettings": { "DatabaseSettingsList": [ { "DatabaseType": "MySQL", "ConnectionString": "Server=localhost;Database=db1;Uid=root;Pwd=root;Port=3306;", "DatabaseName": "db1", "CronExpression": "0 0 2 * * ?" }, { "DatabaseType": "MSSQL", "ConnectionString": "Server=localhost;Database=db2;User Id=sa;Password=your_password;", "DatabaseName": "db2", "CronExpression": "0 30 3 * * ?" } ] }, "FtpSettings": { "Enable": true, "Host": "192.168.1.250", "Port": 21, "User": "ftpuser", "Password": "ftppassword", "RemotePath": "/backups" } } ``` #### 主要配置项说明 - **BackupSettings** - `BackupPath`:备份文件存储路径 - `RetentionDays`:备份文件保留天数 - `BackupFileNameFormat`:备份文件名格式,支持 `{0}`(数据库名)、`{1:yyyyMMddHHmm}`(时间) - `EnableCompression`:是否启用压缩 - `CompressionPassword`:压缩包密码 - **MultiDatabaseSettings** - `DatabaseSettingsList`:数据库配置数组,每个对象包含: - `DatabaseType`:MySQL/MSSQL - `ConnectionString`:数据库连接字符串 - `DatabaseName`:数据库名 - `CronExpression`:定时表达式(Quartz) - **FtpSettings** - `Enable`:是否启用FTP上传 - `Host`/`Port`/`User`/`Password`/`RemotePath`:FTP服务器相关配置 - **Logging** - 日志级别配置 ### 3. Cron 表达式示例 | 表达式 | 说明 | |----------------|------------------| | `0 0 2 * * ?` | 每天凌晨2点执行 | | `0 0 1 * ?` | 每月1号凌晨执行 | | `0 30 9 * * ?` | 每天上午9:30执行 | | `0 0 12 * * ?` | 每天中午12点执行 | | `0 15 10 * * ?`| 每天上午10:15执行 | ## 运行应用程序 ### 1. 编译项目 ```bash dotnet build ``` ### 2. 运行应用程序 ```bash dotnet run ``` ### 3. 发布应用程序 ```bash # 发布到指定目录 dotnet publish -c Release -o ./publish # 运行发布后的应用程序 cd publish dotnet DatabaseBackup.dll ``` ## 部署指南 ### Windows 服务部署 1. 使用 sc.exe 创建 Windows 服务: ```cmd sc create "DatabaseBackupService" binPath="C:\path\to\DatabaseBackup.exe" start=auto sc description "DatabaseBackupService" "数据库自动备份服务" ``` 2. 启动服务: ```cmd sc start DatabaseBackupService ``` 3. 停止服务: ```cmd sc stop DatabaseBackupService ``` ### Linux 服务部署 1. 创建 systemd 服务文件 `/etc/systemd/system/database-backup.service`: ```ini [Unit] Description=Database Backup Service After=network.target [Service] Type=notify ExecStart=/usr/bin/dotnet /opt/database-backup/DatabaseBackup.dll WorkingDirectory=/opt/database-backup User=backup-user Group=backup-user Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` 2. 启用并启动服务: ```bash sudo systemctl enable database-backup.service sudo systemctl start database-backup.service ``` ## 日志查看 应用程序会输出详细的日志信息,包括: - 备份开始和完成时间 - 备份文件路径 - 清理的过期文件数量 - FTP上传结果 - 错误和异常信息 ## 故障排除 ### 常见问题 1. **mysqldump 命令未找到** - 确保 MySQL 客户端工具已安装 - 将 MySQL bin 目录添加到系统 PATH 2. **sqlcmd 命令未找到** - 确保 SQL Server 命令行工具已安装 - 将 SQL Server 工具目录添加到系统 PATH 3. **权限不足** - 确保应用程序有权限访问备份目录 - 确保数据库用户有备份权限 4. **连接字符串错误** - 检查数据库连接字符串格式 - 验证数据库服务器是否可访问 ### 调试模式 在 `appsettings.json` 中设置更详细的日志级别: ```json { "Logging": { "LogLevel": { "Default": "Debug", "Microsoft": "Information", "Microsoft.Hosting.Lifetime": "Information" } } } ``` ## 安全注意事项 1. **连接字符串安全** - 不要在代码中硬编码密码 - 使用环境变量或加密配置 - 定期更换数据库密码 2. **备份文件安全** - 设置适当的文件权限 - 考虑加密备份文件 - 定期验证备份文件完整性 3. **网络安全** - 使用防火墙限制数据库访问 - 考虑使用 VPN 或专用网络 - 定期更新安全补丁 ## 许可证 本项目采用 MIT 许可证。 ## 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。