
pbxx/migrateGo Migration Tool 是一个轻量级Docker镜像,封装了基于Go语言开发的数据库迁移工具,旨在简化数据库模式的版本化管理。该工具支持主流关系型数据库(如PostgreSQL、MySQL、SQLite、SQL Server等),通过命令行接口提供迁移脚本的创建、应用、回滚等操作,帮助开发团队在协作和部署过程中保持数据库结构一致性。
准备迁移脚本目录(本地文件系统),目录结构示例:
migrations/ ├── 001_create_users_table.up.sql ├── 001_create_users_table.down.sql ├── 002_add_email_index.up.sql └── 002_add_email_index.down.sql
通过Docker命令挂载脚本目录并执行迁移操作
bashdocker run --rm \ -v $(pwd)/migrations:/app/migrations \ go-migration-tool create add_user_status_column
执行后将在
migrations目录生成两个文件:XXX_add_user_status_column.up.sql和XXX_add_user_status_column.down.sql(XXX为自动生成的序号)
bashdocker run --rm \ -v $(pwd)/migrations:/app/migrations \ -e DB_DRIVER=postgres \ -e DB_URL="host=db-host port=5432 user=dbuser password=dbpass dbname=mydb sslmode=disable" \ go-migration-tool up
bashdocker run --rm \ -v $(pwd)/migrations:/app/migrations \ -e DB_DRIVER=mysql \ -e DB_URL="root:password@tcp(mysql-host:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local" \ go-migration-tool down 1
bashdocker run --rm \ -e DB_DRIVER=sqlite3 \ -e DB_URL="./mydb.db" \ go-migration-tool status
yamlversion: '3.8' services: app: image: your-app-image depends_on: - db - migrate db: image: postgres:15-alpine environment: POSTGRES_USER: dbuser POSTGRES_PASSWORD: dbpass POSTGRES_DB: mydb migrate: image: go-migration-tool volumes: - ./migrations:/app/migrations environment: DB_DRIVER: postgres DB_URL: "host=db port=5432 user=dbuser password=dbpass dbname=mydb sslmode=disable" command: up depends_on: - db
| 变量名 | 说明 | 示例值 |
|---|---|---|
DB_DRIVER | 数据库驱动类型 | postgres、mysql、sqlite3、sqlserver |
DB_URL | 数据库连接URL(因驱动而异) | PostgreSQL: host=localhost port=5432 user=user dbname=db sslmode=disable |
| 变量名 | 说明 | 默认值 |
|---|---|---|
MIGRATION_DIR | 迁移脚本存放目录(容器内路径) | /app/migrations |
MIGRATE_TABLE | 迁移状态记录表名 | schema_migrations |
MIGRATE_LOCK_TABLE | 迁移锁表名(用于并发控制) | schema_migrations_lock |
VERBOSE | 是否开启详细日志输出(1=开启) | 0 |
| 命令格式 | 说明 |
|---|---|
create <name> | 创建新的迁移脚本对(up/down) |
up | 应用所有未执行的迁移 |
up <n> | 应用最近n个未执行的迁移 |
down | 回滚最近1个迁移 |
down <n> | 回滚最近n个迁移 |
down to <version> | 回滚到指定版本(版本号为脚本前缀数字) |
status | 查看迁移状态(已执行/未执行) |
version | 查看当前数据库的迁移版本 |
{序号}_{描述}.up.sql和{序号}_{描述}.down.sql格式,序号需为整数且递增

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务