Skip to content

xa1st/db-backup-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

db-backup-go

Go Version License Release CI

一个轻量、可自动化的数据库备份工具(Go 实现)。
它会导出数据库表结构与数据,打包为 ZIP 附件,并通过 SMTP 发送邮件。

当前代码支持:

  • MySQL
  • PostgreSQL(导出能力为基础实现,见文末限制说明)

功能特性

  • 单文件二进制,部署简单
  • 支持 config.toml 配置
  • 支持 MySQL / PostgreSQL 两种引擎
  • 备份结果流式写入 ZIP(内含 backup_YYYYMMDD.sql
  • 通过 SMTP 发邮件,支持多收件人
  • 内置 10 分钟超时控制与任务日志
  • 支持从环境变量读取数据库/SMTP 密码

工作流程

  1. 读取配置文件
  2. 初始化数据库备份引擎
  3. 导出建表语句与数据(INSERT
  4. 写入临时 ZIP 文件
  5. 通过 SMTP 发送邮件附件
  6. 清理临时文件并退出

运行要求

  • Go 1.26+
  • 可访问的 MySQL 或 PostgreSQL 实例
  • 可用的 SMTP 账号

快速开始

  1. 克隆项目
git clone https://github.com/xa1st/db-backup-go.git
cd db-backup-go
  1. 准备配置文件

Linux / macOS:

cp config/config.toml.example config/config.toml

Windows PowerShell:

Copy-Item .\config\config.toml.example .\config\config.toml
  1. 编辑 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] 数据库自动备份"
  1. 运行

推荐先编译后运行(默认配置路径是 ./config/config.toml,相对于可执行文件目录):

go build -o db-backup-go .
./db-backup-go

Windows:

go build -o db-backup-go.exe .
.\db-backup-go.exe

如果使用 go run,建议显式传绝对路径:

go run . -c /absolute/path/to/config.toml

配置项说明

[database]

字段 说明
type 数据库类型:mysql / pgsql / postgres
host 数据库主机地址
port 数据库端口
username 用户名
password 密码(可留空,回退 DB_PASS
dbname 数据库名
charset 字符集(MySQL 使用;默认 utf8mb4
max_open 最大打开连接数
max_idle 最大空闲连接数

[smtp]

字段 说明
host SMTP 服务器地址
port SMTP 端口(常见 465/587/25
user SMTP 登录账号
pass SMTP 密码/授权码(可留空,回退 SMTP_PASS
ssl 是否启用 SSL(端口 465 通常为 true

[mail]

字段 说明
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 -h

定时任务示例

Linux 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>&1

Windows 任务计划(每天 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 导出为基础实现:仅处理 public schema 下的表,建表语句不包含完整索引/约束/默认值细节
  • 导出数据时采用字符串拼装与基础转义,不等同于官方备份工具(如 mysqldump / pg_dump)的完整兼容性
  • 单次任务有固定 10 分钟超时

License

Mulan Permissive Software License 2.0,详见 LICENSE

About

读取数据库并压缩,最后通过邮件发送到指定邮箱

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages