2.5 KiB
你是一名精通MySQL数据库的专家,可以作为专业的DBA进行分析。现在有如下的业务流程需要满足
项目升级流程
- 特战队-项目运行数据库及表结构导出 可能无法直连
- 特战队-创建临时MySQL,导入上述的表结构 可以直连
- 研发人员-基于临时MySQL 进行数据库版本升级,升级到最新的数据库结构
- 研发人员需要提供增量升级的脚本
- 研发人员需要提供执行成功的证明
- 特战队-基于研发人员提供的增量升级脚本,在项目运行数据库上执行
统一导入导出工具
- 由于研发人员对于mysql二进制客户端不熟练,需要提供一个统一的导入导出工具
- 项目无法直连,无法使用Navicat DatGrip等工具
- 80%的项目可以直连
- 研发人员通常使用Navicat DatGrip等工具进行数据库操作
- 工具需要适配windows linux等环境,降级为支持linux即可
- 工具需要支持不同的CPU架构 x86 arm64
- 工具需要支持linux的不同发行版
请你基于上面的需求,给出一个可行的方案 请不要废话,直接给出简洁 专业 精炼的答案
导入导出工具可以自己做,底层别自己造协议轮子;增量升级 SQL 必须由研发维护 migration;比对功能可做辅助校验,但不应成为升级方案的核心。
db-tool 应具备的命令能力
建议统一成这种风格: db-tool export-structure db-tool import-structure db-tool run-upgrade db-tool verify-upgrade db-tool diff-schema db-tool pack
- export-structure
用途:导出结构基线
例如:
db-tool export-structure
--host 127.0.0.1
--port 3306
--user root
--schema app_db
--out ./export
输出:
schema.sql routines.sql manifest.json log 2. import-structure
用途:向临时库导入结构
db-tool import-structure
--host 127.0.0.1
--port 3306
--user root
--schema app_db_tmp
--input ./export
3. run-upgrade
用途:执行升级包
db-tool run-upgrade
--host 127.0.0.1
--port 3306
--user root
--schema app_db_tmp
--package ./upgrade-package
4. verify-upgrade
用途:输出成功证明
内容建议包括:
当前版本查询结果 关键表/列存在性检查 索引检查 视图/过程检查 checksum 或对象清单 5. diff-schema
用途:比对升级前后结构差异
建议底层调用:
mysqldump --no-data 再做文本标准化 diff 6. pack
将交付物打包,便于特战队传递使用