一个轻量、可自动化的数据库备份工具(Go 实现)。
它会导出数据库表结构与数据,打包为 ZIP 附件,并通过 SMTP 发送邮件。
当前代码支持:
- MySQL
- PostgreSQL(导出能力为基础实现,见文末限制说明)
- 单文件二进制,部署简单
- 支持
config.toml配置 - 支持 MySQL / PostgreSQL 两种引擎
- 备份结果流式写入 ZIP(内含
backup_YYYYMMDD.sql) - 通过 SMTP 发邮件,支持多收件人
- 内置 10 分钟超时控制与任务日志
- 支持从环境变量读取数据库/SMTP 密码
- 读取配置文件
- 初始化数据库备份引擎
- 导出建表语句与数据(
INSERT) - 写入临时 ZIP 文件
- 通过 SMTP 发送邮件附件
- 清理临时文件并退出
- Go
1.26+ - 可访问的 MySQL 或 PostgreSQL 实例
- 可用的 SMTP 账号
- 克隆项目
git clone https://github.com/xa1st/db-backup-go.git
cd db-backup-go- 准备配置文件
Linux / macOS:
cp config/config.toml.example config/config.tomlWindows PowerShell:
Copy-Item .\config\config.toml.example .\config\config.toml- 编辑
config/config.toml
[database]
type = "mysql" # mysql / pgsql / postgres
host = "127.0.0.1"
port = 3306
username = "root"
password = "" # 为空时回退读取环境变量 DB_PASS
dbname = "mydb"
charset = "utf8mb4" # 仅 MySQL 使用;为空时默认 utf8mb4
max_open = 10
max_idle = 5
[smtp]
host = "smtp.example.com"
port = 465
user = "user@example.com"
pass = "" # 为空时回退读取环境变量 SMTP_PASS
ssl = true
[mail]
from = "user@example.com" # 为空时尝试回退 smtp.user
to = "a@example.com,b@example.com"
title = "[Backup] 数据库自动备份"- 运行
推荐先编译后运行(默认配置路径是 ./config/config.toml,相对于可执行文件目录):
go build -o db-backup-go .
./db-backup-goWindows:
go build -o db-backup-go.exe .
.\db-backup-go.exe如果使用 go run,建议显式传绝对路径:
go run . -c /absolute/path/to/config.toml| 字段 | 说明 |
|---|---|
type |
数据库类型:mysql / pgsql / postgres |
host |
数据库主机地址 |
port |
数据库端口 |
username |
用户名 |
password |
密码(可留空,回退 DB_PASS) |
dbname |
数据库名 |
charset |
字符集(MySQL 使用;默认 utf8mb4) |
max_open |
最大打开连接数 |
max_idle |
最大空闲连接数 |
| 字段 | 说明 |
|---|---|
host |
SMTP 服务器地址 |
port |
SMTP 端口(常见 465/587/25) |
user |
SMTP 登录账号 |
pass |
SMTP 密码/授权码(可留空,回退 SMTP_PASS) |
ssl |
是否启用 SSL(端口 465 通常为 true) |
| 字段 | 说明 |
|---|---|
from |
发件人地址;为空时尝试使用 smtp.user |
to |
收件人地址,多个用英文逗号分隔 |
title |
邮件标题前缀(程序会自动追加日期) |
DB_PASS:当database.password为空时生效SMTP_PASS:当smtp.pass为空时生效
示例(Linux / macOS):
export DB_PASS="your_db_password"
export SMTP_PASS="your_smtp_password"
./db-backup-go示例(Windows PowerShell):
$env:DB_PASS="your_db_password"
$env:SMTP_PASS="your_smtp_password"
.\db-backup-go.exe-c:指定配置文件路径(默认./config/config.toml)-h:显示帮助信息
示例:
./db-backup-go -c ./config/config.toml
./db-backup-go -hLinux cron(每天 03:30):
30 3 * * * cd /opt/db-backup-go && SMTP_PASS='your_smtp_password' ./db-backup-go -c /opt/db-backup-go/config/config.toml >> /var/log/db-backup.log 2>&1Windows 任务计划(每天 03:30):
schtasks /Create /SC DAILY /ST 03:30 /TN "db-backup-go" /TR "powershell -ExecutionPolicy Bypass -Command `$env:SMTP_PASS='your_smtp_password'; & 'C:\tools\db-backup-go\db-backup-go.exe' -c 'C:\tools\db-backup-go\config\config.toml' *> 'C:\tools\db-backup-go\backup.log'" /F- PostgreSQL 导出为基础实现:仅处理
publicschema 下的表,建表语句不包含完整索引/约束/默认值细节 - 导出数据时采用字符串拼装与基础转义,不等同于官方备份工具(如
mysqldump/pg_dump)的完整兼容性 - 单次任务有固定 10 分钟超时
Mulan Permissive Software License 2.0,详见 LICENSE。