# db-backup **Repository Path**: pomfret/db-backup ## Basic Information - **Project Name**: db-backup - **Description**: 用于备份数据库 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-06 - **Last Updated**: 2025-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DB-Backup 一个强大的MySQL数据库备份与迁移工具,使用Go语言开发,支持多种备份策略,同时解决了不同MySQL版本间的兼容性问题。 [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) ## 功能特点 - **多种备份模式**:支持备份到本地SQL文件或直接迁移到远程数据库 - **高兼容性**:自动处理不同MySQL版本间的兼容性问题 - **智能策略**:自动选择最佳备份方法,确保备份成功 - **完整备份**:支持备份表结构、数据、索引、存储过程、触发器和事件 - **灵活配置**:支持命令行参数或配置文件 - **自动检测**:自动查找mysql和mysqldump工具路径 ## 安装 ### 从源码编译 ```bash # 克隆仓库 git clone https://github.com/zuoliang/db-backup.git cd db-backup # 编译 go build -o db-backup cmd/backup/main.go # 可选:将可执行文件移动到系统路径 sudo mv db-backup /usr/local/bin/ ``` ### 安装依赖 确保系统已安装MySQL客户端工具: - **macOS**: ```bash brew install mysql-client ``` - **Ubuntu/Debian**: ```bash sudo apt-get install mysql-client ``` - **CentOS/RHEL**: ```bash sudo yum install mysql ``` ## 快速开始 ### 备份到本地文件 ```bash ./db-backup --source-host localhost --source-port 3306 --source-user root --source-pass password --source-db mydatabase --output /path/to/backup.sql ``` ### 备份到远程数据库 ```bash ./db-backup --source-host localhost --source-user root --source-pass password --source-db mydatabase --local=false --dest-host remote-server --dest-user remote-user --dest-pass remote-password --dest-db target_database ``` ### 使用配置文件 我们提供了多个配置示例,位于 `examples` 目录: ```bash # 复制示例配置 cp examples/local_backup.json myconfig.json # 编辑配置文件,修改数据库连接信息 vim myconfig.json # 执行备份 ./db-backup --config myconfig.json ``` ## 备份策略 工具实现了三种备份策略,会自动尝试从最简单到最复杂: 1. **基本备份** - 使用最基本的mysqldump选项,适用于大多数场景 2. **中等兼容性** - 使用更多的兼容性选项,适用于不同版本MySQL间的迁移 3. **手动备份** - 直接通过SQL命令导出数据库结构和数据,适用于mysqldump失败的情况 对于远程数据库备份(数据库到数据库),工具使用了更可靠的表级操作方法: 1. 获取源数据库所有表结构 2. 在目标数据库创建相同的表结构 3. 行级别复制数据,解决版本兼容性问题 ## 详细参数 | 参数 | 描述 | 默认值 | |------|------|--------| | --config | 配置文件路径 | - | | --source-host | 源MySQL主机地址 | localhost | | --source-port | 源MySQL端口 | 3306 | | --source-user | 源MySQL用户名 | root | | --source-pass | 源MySQL密码 | - | | --source-db | 要备份的数据库名称 | - | | --dest-host | 目标MySQL主机地址 | - | | --dest-port | 目标MySQL端口 | 3306 | | --dest-user | 目标MySQL用户名 | root | | --dest-pass | 目标MySQL密码 | - | | --dest-db | 目标数据库名称 | 与源数据库相同 | | --output | 备份文件输出路径 | [数据库名]_[时间戳].sql | | --local | 是否为本地备份 | true | | --mysqldump-path | mysqldump可执行文件路径 | 自动查找 | | --mysql-path | mysql可执行文件路径 | 自动查找 | | --import | 从指定SQL文件导入数据到目标数据库 | - | ## 故障排除 ### 找不到MySQL客户端工具 如果出现 "未找到mysqldump/mysql可执行文件" 错误,可以: 1. 确保安装了MySQL客户端工具 2. 手动指定mysqldump和mysql路径: ```bash ./db-backup --mysqldump-path=/path/to/mysqldump --mysql-path=/path/to/mysql [其他参数] ``` 或在配置文件中指定: ```json { "mysqlDumpPath": "/path/to/mysqldump", "mysqlPath": "/path/to/mysql" } ``` ### 版本兼容性问题 不同版本的MySQL可能有语法差异,如果遇到以下错误: - `Table 'xxx' already exists` - 目标数据库已存在相同名称的表 - `ERROR 1231 (42000): Variable 'xxx' can't be set to the value of 'NULL'` - MySQL版本不兼容 - `INFORMATION_SCHEMA.LIBRARIES表不存在` - 源MySQL版本与目标版本不兼容 解决方案: 1. 使用配置文件,启用远程备份模式 (`"isLocalBackup": false`) 2. 此模式会使用表级操作,避开SQL语法兼容性问题 ### 权限问题 如果遇到 "权限被拒绝" 错误: 1. 确保用户具有源数据库的SELECT权限 2. 确保用户具有目标数据库的CREATE、DROP、INSERT权限 3. 对于远程备份,确保两个数据库都配置了正确的用户权限 ## 贡献 欢迎贡献代码或提交问题! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add some amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 创建Pull Request ## 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件 ## 致谢 感谢所有贡献者和开源社区的支持!