暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【磐维数据库】改造案例分享(一):Mariadb到Panweidb对象改造

原创 钟一 2025-04-11
228

磐维数据库(PanWeiDB)是由中国移动基于中国本土开源数据库openGauss打造的自研数据库产品,主要面向ICT基础设施。它具有高性能、高可靠性、高安全性和高兼容性的特点,能够支持集中式、分布式、云原生、一体机等多种应用场景。目前,磐维数据库已在中国移动的多个省(区、市)公司及专业公司部署应用。

案例背景

本文将分享江西移动公司在数据库国产化过程中的<迁移对象改造案例之一>:使用dtp迁移工具做mariadb迁移到磐维B模式时,出现的一下报错的处理方案。

环境描述

  • OS版本:BCLinux for Euler 21.10 (LTS-SP2)
  • DB版本:panweidb 2.0.2
  • 兼容模式:B模式
  • 数据库架构:单机模式
  • DTP版本:2.0.3

问题描述

使用dtp迁移工具做mariadb迁移到磐维B模式时,有大量表迁移失败,查看具体原因时,显示以下信息:

在目标库执行失败: ERROR: Incorrect table definition, auto_increment column must be defined as a key

问题分析

  1. 在看到报错信息时,将原始语句目标语句的表结构复制出来观察差异。

    -- 源端sql1 CREATE TABLE `test1` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `contact_pointId` int(11) DEFAULT NULL COMMENT '触点id', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci -- 转化后的sql1 CREATE TABLE test2 ( id int NOT NULL AUTO_INCREMENT , contact_pointId int DEFAULT NULL ) ENGINE=InnoDB AUTO_INCREMENT=3; COMMENT ON COLUMN contactMangeLog.id IS E'主键'; COMMENT ON COLUMN contactMangeLog.contact_pointId IS E'触点id'; -- 源端sql2 CREATE TABLE `test2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `key` varchar(255) NOT NULL DEFAULT '', `value` varchar(2000) NOT NULL DEFAULT '', `type` varchar(11) DEFAULT '0', `op_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), PRIMARY KEY (`id`), UNIQUE KEY `unique_key` (`key`) ) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci -- 转化后的sql2 CREATE TABLE test2 ( id int UNSIGNED NOT NULL AUTO_INCREMENT , "key" varchar(255) NOT NULL DEFAULT '', value varchar(2000) NOT NULL DEFAULT '', type varchar(11) DEFAULT '0', op_time timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp() ) ENGINE=InnoDB AUTO_INCREMENT=97;
  2. 原始语句在磐维数据库直接执行(创建一个测试schema)执行发现未有报错,再对比目标语句发现缺失的部分即可发现问题的关键。

分析结论

可以看到,目标语句在字段使用AUTO_INCREMENT时,没有对其定义为primary key或者UNIQUE KEY才导致其报错,且报错中的 auto_increment column must be defined as a key也可以帮我们快速定位问题。

解决方法

将使用auto_increment 的字段定义为primary key或者UNIQUE KEY即可。

总结

手动将有问题的表改造完后,再通过dtp仅迁移数据即可完成迁移。

最后修改时间:2025-05-19 10:07:11
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论