实现异地备份阿里云服务器数据库
实现异地备份阿里云服务器数据库
项目已开源,在文末
背景:因为商城项目数据每天都会有大量订单,同时数据需要在另一个系统使用。防止数据丢失,提出将数据备份到本地服务器
基本思路:
最简单的方法就是手动将sql脚本复制到本地服务器(麻烦且容易忘记),同时数据库多了更加麻烦,如果单独使用sql管理工具(如navicat),使用传输的话需要用到本地服务器的数据库密码,对其他系统的数据库有威胁。
同时又考虑到无论是阿里云服务器还是本地服务器,都是windows操作系统,同时对C#语言非常熟悉,所以这里直接想用C#开发一个windows服务程序,安装在阿里云服务器上,本地服务器搭建一个ftp站点,设置用户凭证,windwos服务程序定时备份数据库将脚本通过ftp传输到本地服务器。如果是linux操作系统可以构建shell脚本来完成数据库备份及文件传输。
sc.exe create
sc.exe start
sc.exe stop
如果windows服务启动不成功,可查看时间查看器(event view)查看应用程序可以看到服务启动记录
强制删除windows服务:
通过WMI直接删除(终极方法)
powershell
plaintext
1
2 >$service = Get-WmiObject -Class Win32_Service -Filter "Name='Backup Shop Service'"
>$service.Delete() | Out-Null
具体实现流程
- 服务启动:
- 读取配置文件(appsettings.json),初始化备份参数。
- 配置Serilog日志。
- 注册Quartz定时任务调度。
- 定时任务调度:
- Quartz根据Cron表达式定时触发备份任务。
- 备份任务执行(BackupJob):
- 测试MySQL数据库连接。
- 测试目标FTP服务器连接。
- 调用mysqldump命令生成数据库备份文件。
- 通过FluentFTP上传备份文件到远程服务器。
- 验证文件上传结果。
- 清理本地过期备份文件。
- 失败时自动重试,重试次数和间隔可配置。
- 日志记录:
- 所有关键操作和异常均写入日志文件,便于后续排查。
MySQL自动备份服务
这是一个基于.NET 8的Windows服务,用于自动备份MySQL数据库并通过FTP传输到远程服务器。
使用的主要框架和包
- .NET 8 Worker Service:作为Windows服务的基础框架。
- Quartz:任务调度框架,实现定时备份。
- MySql.Data:MySQL数据库连接和操作。
- FluentFTP:用于FTP文件传输。
- Serilog:日志记录。
- Microsoft.Extensions.Configuration:配置管理。
- Microsoft.Extensions.Hosting.WindowsServices:支持以Windows服务方式运行。
解决的问题
- MySQL数据库定时自动备份,减少人工操作。
- 备份文件自动传输到远程服务器,提升数据安全性。
- 自动清理过期备份,节省存储空间。
- 失败自动重试,提升备份可靠性。
- 详细日志记录,便于运维和问题排查。
实现的主要功能
- 定时自动备份MySQL数据库(支持自定义Cron表达式)。
- 使用mysqldump工具生成完整SQL备份文件。
- 通过FTP协议将备份文件上传到远程服务器。
- 支持备份失败自动重试和日志记录。
- 自动清理本地过期备份文件。
- 可通过配置文件灵活设置数据库、目标服务器、备份策略等参数。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.






