Mysql迁移DM国产达梦数据库

目录

1 快速迁移

1.1 已有用户的情况下迁移

1.1.1 打开迁移工具

1.1.2 创建工程

1.1.3 新建迁移

1.1.3.1 选择迁移方式

1.1.3.2 配置数据源

1.1.3.3 配置目的

1.1.3.4 迁移选项

1.1.3.5 指定模式

1.1.3.6 指定对象

1.1.3.7 审阅任务

1.1.3.8 迁移完成

1.1.4 查看迁移后的表

1.1.4.1 登录新用户ESO

1.1.4.2 查看表数据

1.1.4.3  spring连接配置

1.2 无用户的情况下迁移

2 迁移后的报错

2.1报错内容

提取关键信息

2.2 验证报错

2.3 分析报错

2.3暴力解决Java代码中问题

2.3.1实体类Entity解决方式

2.3.2mapper里的原始sql解决方式

2.3.3其他手动sql解决方式

2.4破釜沉舟解决问题

3 可视化重装 for Windows

3.1删除实例服务

3.1.1停止实例服务

3.1.2删除数据库服务实例

3.2 创建数据库实例

3.2.1 新建

3.2.2 模板

3.2.3 数据实例保存目录

3.2.4 数据库名配置,默认即可

3.2.4 初始化参数(丝滑迁移的关键1)

3.2.5 再次启动服务

3.3 操作数据库

3.3.1 新建连接

3.3.2 新建表空间

3.3.3 创建用户(丝滑迁移的关键2)

3.3.4 常规设置

3.3.5 授权

3.3.6 模式


        甲方爸爸要求,信创的机器(arm架构),现在需要迁移mysql到达梦,先在本地(x86-64架构)模拟下咯!

1 快速迁移

1.1 已有用户的情况下迁移

用户:ESO

模式:ESO

不理解账号创建的同学,先直接跳转章节3.3部分查看。

不会安装达梦数据库的同学,移步本人其他文章查看(Windows版,Docker防踩坑版、信创版)

1.1.1 打开迁移工具

1.1.2 创建工程

右击空白处,新建

1.1.3 新建迁移

1.1.3.1 选择迁移方式

MySql迁移DM

1.1.3.2 配置数据源

输入你的mysql配置后,刷新,选择要迁移的数据库名

1.1.3.3 配置目的

输入你要迁入的达梦数据库的配置

1.1.3.4 迁移选项

先用默认

保持对象名大小写,不勾选,达梦默认表名和字段名都大写

1.1.3.5 指定模式

1.1.3.6 指定对象

全选你要迁移的表

1.1.3.7 审阅任务

点击完成开始迁移

1.1.3.8 迁移完成

1.1.4 查看迁移后的表

1.1.4.1 登录新用户ESO

1.1.4.2 查看表数据

1.1.4.3  spring连接配置

1.2 无用户的情况下迁移

和1.1操作流程一样,但是账号用的是SYSDBA;

迁移后的表,会自动新建一个模式ESO,但是是属于SYSDBA用户的,也没有独立的表空间;

2 迁移后的报错

2.1报错内容

无效的表或视图名[SYS_USER]
; 第3 行附近出现错误:
无效的表或视图名[SYS_USER]; nested exception is dm.jdbc.driver.DMException: 第3 行附近出现错误:
无效的表或视图名[SYS_USER]] with root cause

dm.jdbc.driver.DMException: 第3 行附近出现错误:
无效的表或视图名[SYS_USER]
    at dm.jdbc.driver.DBError.throwException(DBError.java:684)

提取关键信息

  • 无效的表或视图名[SYS_USER]
  • ### SQL: SELECT  *  FROM sys_user     WHERE (username = ?)

2.2 验证报错

把报错中的sql,在达梦数据库里执行一遍

发现该sql语句是报错的;

2.3 分析报错

首先,达梦数据库安装时,选择的是大小写敏感,所以查看达梦的表名是否大写

所以,sql语句里必须写成:

SELECT  *  FROM  "SYS_USER"

还是报错,原因是,当前表所在的模式(理解为mysql的数据库)是ESO,我们登录账户是SYSDBA,两者不一致时,需要写上模式作为前缀。若一致则不需要写(用ESO账号登录时)

正确sql如下

select  *  from "ESO"."SYS_USER"

2.3暴力解决Java代码中问题

2.3.1实体类Entity解决方式

通过@TableName()注解,指定表名。

@TableName("sys_user")   改成   @TableName("ESO.SYS_USER")

2.3.2mapper里的原始sql解决方式

报错内容:


首先确认这里的实体类SysUserTokenEntity已经修改兼容好了。

“注意,过滤只看.java文件”

然后过滤只看.xml文件,去排查mapper。

修改完成如下:

2.3.3其他手动sql解决方式

  • 把表名qrtz_手动改成大写QRTZ_;
  • 前缀加上 ESO.
  • 完整:"ESO.QRTZ_"

2.4破釜沉舟解决问题

        暴力解决,需要一个个的去兼容修改,适合代码量不多的情况,很麻烦很费时间,还影响原来的代码;

        我们采用章节3进行可视化重装,实现指定用户和模式以及大小写不敏感;需要用到章节1的快速迁移来实现。

3 可视化重装 for Windows

3.1删除实例服务

3.1.1停止实例服务

打开DM库服务查看器

右击停止数据库实例服务

3.1.2删除数据库服务实例

打开DM数据库配置助手

选择数据库

确认删除

3.2 创建数据库实例

3.2.1 新建

3.2.2 模板

默认即可

3.2.3 数据实例保存目录

一般默认即可

3.2.4 数据库名配置,默认即可

3.2.4 初始化参数(丝滑迁移的关键1

注意时区、字符集编码、大小写敏感

其中,大小写敏感必须去掉,

这样spring工程代码适配时,不需要暴力的去一个个转换成大写了

完成

3.2.5 再次启动服务

3.3 操作数据库

3.3.1 新建连接

账号密码一样

SYSDBA/SYSDBA

3.3.2 新建表空间

红框部分自己写

文件路径MY_ESO\MY_ESO.DBF不可以存在,否则会创建失败!

完整路径:E:\dmdbms\data\MY_ESO\MY_ESO.DBF

创建成功后,可以看到MY_ESO.DBF文件自动生成。

查看新建的表空间

3.3.3 创建用户(丝滑迁移的关键2)

新建用户ESO,会自动创建模式(类似数据库)ESO;

这样,原本的spring java代码,就不需要手动的去加上ESO.前缀

右击管理用户,新建

3.3.4 常规设置

账号密码设置、关联表空间和索引表空间、散列算法

ESO/12345678

创建成功

密码长度太短会报错

3.3.5 授权

3.3.6 模式

新建用户成功后,会生成一个和用户名同名的模式

模式里面才是实际对表的增删改查等操作

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!对于将MySQL迁移达梦数据库的问题,您可以按照以下步骤进行操作: 1. 首先,确保您已经在目标服务器上安装了达梦数据库,并且数据库服务正在运行。 2. 在MySQL中创建一个备份文件,以便将数据导出到达梦数据库。您可以使用mysqldump命令导出MySQL数据库。例如,执行以下命令导出名为"mydatabase"的数据库: ``` mysqldump -u [用户名] -p [密码] [mydatabase] > mydatabase.sql ``` 这将生成一个名为"mydatabase.sql"的备份文件。 3. 将备份文件传输到达梦数据库服务器上,您可以使用FTP或其他文件传输工具进行传输。 4. 在达梦数据库服务器上,使用达梦数据库客户端工具打开终端或命令提示符。 5. 创建一个新的数据库,用于存储MySQL数据。例如,执行以下命令创建名为"mydatabase"的数据库: ``` create database mydatabase; ``` 6. 导入MySQL备份文件到达梦数据库。例如,执行以下命令导入备份文件: ``` dm_import -u [用户名] -p [密码] -d mydatabase -f mydatabase.sql ``` 这将导入备份文件中的数据到达梦数据库中的"mydatabase"数据库。 7. 确认数据导入成功,您可以使用达梦数据库客户端工具连接到达梦数据库并验证数据是否正确导入。 请注意,由于MySQL达梦数据库之间的差异,某些功能和语法可能不兼容。在迁移过程中,您可能需要进行一些调整和修改以适应达梦数据库的要求。 希望这些步骤对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值