# mysql迁移到大人金仓 **Repository Path**: lni_wang/mysql2kes ## Basic Information - **Project Name**: mysql迁移到大人金仓 - **Description**: 把mysql 数据 迁移到 人大金仓数据库. - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-09-03 - **Last Updated**: 2025-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MySQL2KingbaseES 数据迁移工具 ## 项目简介 MySQL2KingbaseES 是一个专业的数据迁移工具,用于将 MySQL 数据库的数据和结构迁移到 KingbaseES (人大金仓数据库)。该工具支持批量迁移、断点续传、数据校验等功能,确保数据迁移的准确性和可靠性。 ## 功能特性 - 支持多任务配置管理,每个任务独立配置文件 - 自动处理 MySQL 到 KingbaseES 的模式转换(MySQL数据库映射到KingbaseES模式) - 支持断点续传,迁移中断后可从断点处继续 - 提供数据校验机制,确保数据迁移的完整性 - 生成详细的迁移日志和报告 - 支持表结构和数据的迁移 - 对视图表进行特殊处理,生成SQL脚本文件供人工处理 ## 软件架构 ### 整体架构 本项目采用模块化设计,层次分明,主要包含以下模块: 1. **配置管理模块**:负责解析和管理任务配置文件 2. **数据库连接模块**:管理与源数据库(MySQL)和目标数据库(KingbaseES)的连接 3. **元数据迁移模块**:处理数据库表结构的迁移 4. **数据迁移模块**:负责数据的批量迁移 5. **任务跟踪模块**:记录和管理迁移任务的执行状态 6. **日志记录模块**:记录系统运行日志和错误信息 7. **工具辅助模块**:提供通用功能支持 ### 目录结构 ``` mysql2kes/ ├── main.py # 主入口文件 ├── config/ # 配置相关模块 │ ├── __init__.py │ └── config_manager.py # 配置管理器 ├── db/ # 数据库相关模块 │ ├── __init__.py │ ├── mysql_db.py # MySQL数据库操作类 │ └── kingbase_db.py # KingbaseES数据库操作类 ├── migration/ # 迁移核心模块 │ ├── __init__.py │ ├── metadata_migrator.py # 元数据迁移器 │ └── data_migrator.py # 数据迁移器 ├── task/ # 任务管理模块 │ ├── __init__.py │ └── task_tracker.py # 任务跟踪器 ├── utils/ # 工具类模块 │ ├── __init__.py │ ├── logger.py # 日志工具 │ └── common.py # 通用工具函数 ├── taskconfig/ # 任务配置文件目录 ├── logs/ # 日志文件存储目录 ├── reports/ # 迁移报告和SQL文件存储目录 └── README.md # 项目说明文档 ``` ## 安装教程 ### 环境要求 - Python 3.12 或更高版本 - 所需依赖包: - pymysql (MySQL连接驱动) - psycopg2 (KingbaseES连接驱动) - pyyaml (配置文件解析) - logging (日志记录) ### 安装步骤 1. 克隆或下载本项目到本地 ```bash git clone <项目地址> cd mysql2kes ``` 2. 创建Python虚拟环境(推荐) ```bash python -m venv .venv ``` 3. 激活虚拟环境 - Windows系统: ```bash .venv\Scripts\activate ``` - Linux/Mac系统: ```bash source .venv/bin/activate ``` 4. 安装依赖包 ```bash pip install pymysql psycopg2-binary pyyaml ``` 5. 确保已安装 MySQL 和 KingbaseES 数据库客户端,并能正常连接到相应的数据库服务器 ## 完整使用教程 ### 第一步:配置迁移任务 1. 在 `taskconfig` 目录下创建任务配置文件(YAML格式),例如 `migration_task.yaml` ```bash cd taskconfig copy NUL migration_task.yaml ``` 2. 编辑配置文件,填写源数据库和目标数据库的连接信息以及迁移参数 ```yaml # MySQL数据库配置 source_db: host: localhost # MySQL服务器地址 port: 3306 # MySQL端口号 user: root # MySQL用户名 password: your_password # MySQL密码 database: source_db_name # 要迁移的MySQL数据库名 # KingbaseES数据库配置 target_db: host: localhost # KingbaseES服务器地址 port: 54321 # KingbaseES端口号 user: system # KingbaseES用户名 password: your_password # KingbaseES密码 database: target_db_name # KingbaseES数据库名 schema: target_schema_name # MySQL数据库对应到KingbaseES的模式名(会自动转为小写) # 迁移配置 migration: batch_size: 1000 # 批量迁移数据大小,可根据数据量调整 skip_existing_tables: false # 是否跳过已存在的表,true表示跳过,false表示重建 include_tables: [] # 指定要迁移的表,为空表示所有表都迁移 exclude_tables: [] # 指定不迁移的表,优先级高于include_tables export_view_sql: true # 是否导出视图表SQL,默认为true ``` 3. 配置参数说明: - **source_db**: 源MySQL数据库的连接信息 - **target_db**: 目标KingbaseES数据库的连接信息 - **migration.batch_size**: 每次批量迁移的数据行数,数据量大时可适当调大 - **migration.skip_existing_tables**: 是否跳过已存在的表,设置为true时不会覆盖已存在的表 - **migration.include_tables**: 白名单,只迁移列表中指定的表,如 `['table1', 'table2']` - **migration.exclude_tables**: 黑名单,不迁移列表中指定的表,如 `['log_table', 'temp_table']` - **migration.export_view_sql**: 是否导出视图的SQL语句到文件 ### 第二步:执行数据迁移 1. 确保虚拟环境已激活,然后在项目根目录下执行以下命令 ```bash python main.py migration_task ``` (注意:这里的 `migration_task` 是任务配置文件的文件名,不包含 `.yaml` 后缀) 2. 观察控制台输出,迁移过程会显示当前进度和状态 ``` 加载配置: migration_task 连接MySQL数据库: localhost:3306 连接KingbaseES数据库: localhost:54321 初始化完成 开始任务: migration_task 开始迁移元数据... 开始迁移数据,共 10 个表需要迁移 迁移表 table1: 1000/10000 行已迁移... ... ``` 3. 迁移过程的详细信息会同时记录在 `logs` 目录下的日志文件中 ### 第三步:监控迁移进度 1. 迁移过程中,系统会自动在 `reports/{任务名称}/` 目录下生成 `task_status.json` 文件,记录当前迁移状态 2. 可以通过查看日志文件实时了解迁移进度和可能出现的问题 ```bash # 查看最新的日志信息(Windows PowerShell) Get-Content logs\migration_task_*.log -Tail 50 # Linux/Mac系统 tail -f logs/migration_task_*.log ``` 3. 每个表迁移完成后,系统会自动进行数据校验,确保源数据库和目标数据库中的记录数一致 ### 第四步:断点续传操作 1. 当迁移过程因网络中断、程序崩溃等原因中断时,系统会自动保存当前迁移状态 2. 再次执行相同的命令,系统会自动读取之前的状态文件,从中断点处继续迁移 ```bash python main.py migration_task ``` 3. 续传时,系统会跳过已经成功迁移的表,只处理未完成或失败的表 ### 第五步:查看迁移结果 1. 迁移完成后,查看控制台输出确认迁移是否成功 ``` 迁移任务已成功完成 ``` 2. 检查 `reports/{任务名称}/` 目录下的文件: - `schema_create.sql`: 目标数据库模式创建SQL - `tables_create.sql`: 所有表的创建SQL语句 - `task_status.json`: 任务执行状态的完整记录 - `views/`: 存放所有视图表的SQL文件(需要手动处理) 3. 查看详细的迁移报告,了解每个表的迁移情况 ### 第六步:处理视图表 1. 由于MySQL和KingbaseES的视图语法存在差异,视图表需要手动处理 2. 打开 `reports/{任务名称}/views/` 目录,查看所有导出的视图SQL文件 3. 根据KingbaseES的语法规范,手动修改这些SQL语句 4. 使用KingbaseES客户端工具连接到目标数据库,执行修改后的视图创建SQL ### 常见问题与解决方案 1. **数据库连接失败** - 检查网络连接是否正常 - 确认数据库服务器地址、端口号、用户名和密码是否正确 - 确认数据库服务是否正常运行 - 确认防火墙是否允许相应端口的访问 2. **迁移过程中出现错误** - 查看日志文件,定位具体错误信息 - 根据错误提示进行相应的调整 - 重新执行迁移命令,系统会自动从断点处继续 3. **数据校验不一致** - 检查源数据库和目标数据库的数据类型映射是否正确 - 确认迁移过程中源数据库的数据是否有变化 - 考虑重新迁移存在问题的表 4. **大表迁移效率问题** - 适当增大 `batch_size` 参数值 - 考虑将大表单独迁移 - 确保网络连接稳定且带宽足够 ## 最佳实践建议 1. **迁移前准备** - 对源数据库进行备份,以防不测 - 确保目标数据库有足够的存储空间 - 检查源数据库的表结构和数据,清理不必要的数据 2. **迁移过程优化** - 对于大型数据库,建议分批次迁移,先迁移重要的、数据量小的表 - 迁移过程中关闭不必要的应用程序,确保系统资源充足 - 定期查看日志,及时发现和解决问题 3. **迁移后验证** - 对比源数据库和目标数据库的表结构和数据量 - 对关键业务数据进行抽样检查 - 确认所有索引、约束等都已正确迁移 - 测试应用程序连接到新数据库的功能 4. **性能优化** - 迁移完成后,可以根据KingbaseES的特性进行性能优化 - 重建索引、更新统计信息等 - 根据实际业务需求调整数据库参数 ## 日志说明 系统会在 `logs` 目录下生成详细的运行日志文件,文件名格式为 `{任务名称}_{时间戳}.log`。日志内容包括: - 迁移开始和结束时间 - 每张表的迁移状态、耗时和记录数 - 数据校验结果 - 错误信息和异常堆栈 - 任务执行的各个关键节点信息 通过查看日志,可以全面了解迁移过程的详细情况,便于排查和解决问题。 ## 注意事项 1. 迁移前请确保源数据库和目标数据库连接正常 2. 迁移过程中请确保网络连接稳定 3. 对于大型数据库,建议分批迁移以避免内存问题 4. KingbaseES的模式名和数据库名将自动转换为小写 5. 视图表需要手动处理,请查看reports目录下的SQL文件 6. 迁移过程中请勿修改源数据库的数据,以免造成数据不一致 7. 迁移完成后,建议进行全面的测试,确保应用程序能正常运行