首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL 5.7.27 迁移 DM 8

MySQL 5.7.27 迁移 DM 8

作者头像
飞询
发布2025-08-01 14:28:01
发布2025-08-01 14:28:01
4730
举报
文章被收录于专栏:云同步云同步

:::info 参考链接: https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html#2.2.6%20%E7%A7%BB%E6%A4%8D%E5%AE%9E%E6%96%BD https://eco.dameng.com/document-preview/dm/zh-cn/start/dm-create-tablespace ::: :::info window 安装达梦工具:https://www.yuque.com/heyyall/zwitgw/xgmleg1ag6y15prx?singleDoc (如果 linux 安装达梦数据库,并且支持可视化界面那么就不需要安装) 迁移使用工具:DM数据迁移工具 :::

从语雀写好导入的,格式有点错乱,语雀链接:https://www.yuque.com/heyyall/zwitgw/tzt3t8zy0m3nsigo?singleDoc# 《MySQL 5.7.27 迁移 DM 8》

迁移前对象统计

  1. 统计指定库中表的数目
代码语言:javascript
复制
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '数据库名称' GROUP BY TABLE_SCHEMA;
  1. 统计指定库中视图的数目
代码语言:javascript
复制
SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS  
WHERE TABLE_SCHEMA  = '数据库名称'  GROUP BY TABLE_SCHEMA;
  1. 统计指定库中所有的存储过程
代码语言:javascript
复制
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='数据库名称';
  1. 统计指定库中所有的函数
代码语言:javascript
复制
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='FUNCTION' AND ROUTINE_SCHEMA='数据库名称';
  1. 统计指定库中所有的触发器
代码语言:javascript
复制
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS 
WHERE TRIGGER_SCHEMA= '数据库名称';
  1. 将指定库中所有表数据量记录到辅助表
代码语言:javascript
复制
CREATE TABLE MYSQL_TABLES(TAB_OWNER VARCHAR(100),TAB_NAME VARCHAR(100),TAB_COUNT INT);
INSERT INTO MYSQL_TABLES SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = '数据库名称' ORDER BY TABLE_ROWS DESC;

迁移评估

官网中用的是 达梦企业管理器 DEM,但是 DM 数据迁移工具中也可以评估

  1. 创建评估
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  1. 填写数据源(源数据库)
image.png
image.png
  1. 填写达梦数据源(目的数据库)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  1. 选择评估的项目
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  1. 指定要评估的数据库模式,勾选 MySQL 中需要迁移的库进行评估。
image.png
image.png
  1. 选择 MySQL 库中具体需要评估的对象(表)
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  1. 确认评估任务后开始评估
image.png
image.png
  1. 查看评估报告
image.png
image.png
  1. 点击评估概述,查看是否有不兼容的情况
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

不兼容情况

没处理过,官方给出的建议是:通过迁移评估可以将 DM 数据库不兼容的部分先整理出来,使用 DM 语法进行手动修改,在正式迁移时不兼容的对象就不使用工具进行迁移,待其它对象迁移完成后再将修改好的对象导入到 DM 数据库中

迁移前准备

:::info 官网:MySQL 的体系架构是单实例多库,DM 数据库是单库多实例的架构,MySQL 可能是一个 root 用户访问多个库,访问前切换一下当前库即可。从 MySQL 迁移到达梦的时候就需要针对 MySQL 中的每一个库在达梦里面创建一个用户和表空间来对应。例如 MySQL 中有一个库 dbtest,达梦里面先创建一个表空间 dbtest,然后创建一个用户 DBTEST,指定默认表空间为 dbtest ::: :::info 官网:在做 MySQL 迁移的时候要先分析本次迁移需要从源库中移植哪一个库或者哪几个库的数据,然后为每一个库分别在达梦中创建独立的表空间和用户 :::

建议:用户名,表空间名,索引空间名都为大写,并保持一致,要不然可能迁移的时候报各种各样的错,有时候可能还很懵

创建用户表空间

个人理解: 物理存储容器

:::info 官网:https://eco.dameng.com/document-preview/dm/zh-cn/start/dm-create-tablespace ::: 创建 DBTEST 表空间存储 MySQL 中 dbtest 库迁移过来的数据

代码语言:javascript
复制
-- 创建表空间dbtest,数据文件为DBTEST.DBF。
create tablespace "dbtest" datafile '/data/dmdata/DAMENG/DBTEST.DBF' size 2048 ;

:::info 注意:达梦数据库的数据文件在空间不足时自动增长,每次自动增长的大小和表空间空间上限可以自己设置,那如果说超过扩展上限就会导致表空间不足(可能会出现插入数据失败的情况) :::

创建用户并授予权限

相关文档: DM8安全管理.pdf 创建 DBTEST 用户并授予权限,使用 dbtest 表空间。

代码语言:javascript
复制
-- 创建用户
create user "DBTEST" identified by "密码"  
-- 指定用户DBTEST表空间为dbtest
default tablespace "dbtest"
-- 指定用户DBTEST索引表空间为dbtest
default index tablespace "dbtest";
-- 授予用户DBTEST常规权限
grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "DBTEST";

迁移

  1. 新建迁移
image.png
image.png
  1. 选择迁移方式
image.png
image.png
  1. 填写数据源信息(源数据库)
image.png
image.png
image.png
image.png
image.png
image.png
  1. 填写达梦数据库信息(目的数据库) :::info 注意:这里登录的用户信息要使用新建的用户 :::
image.png
image.png
  1. 选择迁移选项
image.png
image.png
image.png
image.png
  1. 选择要迁移的数据库
eabe859b727b063acb08e785e94a8b4.png
eabe859b727b063acb08e785e94a8b4.png
  1. 选择要迁移的表 :::info 官网建议:通过迁移评估可以将 DM 数据库不兼容的部分先整理出来,使用 DM 语法进行手动修改,在正式迁移时不兼容的对象就不使用工具进行迁移,待其它对象迁移完成后再将修改好的对象导入到 DM 数据库中。 :::
image.png
image.png
image.png
image.png
  1. 自定义对象迁移策略

建议在转换中,先进行表,再进行迁移数据,这样能避免一些报错,可以看下面的小建议

image.png
image.png
92cd5ebcfcc1c2d70b387236c3a11f0.png
92cd5ebcfcc1c2d70b387236c3a11f0.png
  1. 点击完成,开始迁移

点击下一步 -> 点击完成

image.png
image.png

迁移小建议

  1. 建议先迁移表再迁移数据,有些报错通过这种分开迁移的方式可以避免 :::info 官方:如果数据数据量较大,可以选择先迁移表结构定义相关内容,再迁移数据,最后迁移索引。大字段建议单独迁移,且迁移大字段时建议把一次读取和一次提交的值调小,一般在20或以下效率可能会更好,设置较大值时迁移效率较低。 :::
    1. 迁移表和索引

注意:需要勾选启用标志列插入,要不然会出现一种情况就是,自增主键和 mysql 数据库的不一样

image.png
image.png
  1. 迁移数据
image.png
image.png

统计达梦迁移后的数据

  1. 统计达梦数据库中相关用户的对象数
代码语言:javascript
复制
# OWNER 后面要替换成自己的用户名
SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS WHERE OWNER='USER_NAME' GROUP BY OBJECT_TYPE;
  1. 统计 MySQL 迁移过来的表的数据量并记录到辅助表
代码语言:javascript
复制
CREATE TABLE DM_TABLES
(
TAB_OWNER VARCHAR(100),
TAB_NAME  VARCHAR(100),
TAB_COUNT INT
);

DECLARE BEGIN FOR REC IN
(SELECT OWNER,
OBJECT_NAME
FROM ALL_OBJECTS
WHERE OWNER='USER_NAME'
AND OBJECT_TYPE='TABLE'
)
LOOP
EXECUTE IMMEDIATE 'INSERT INTO DM_TABLES SELECT '''|| REC.OWNER ||''','''|| REC.OBJECT_NAME ||''',COUNT(*) FROM '|| REC.OWNER || '.' || REC.OBJECT_NAME;
END LOOP;
END;

数据对比

  1. 对象对比

对比迁移前 mysql 查出来的数据,看对不对得上,表有可能会多一个,因为最后面手动添加了一张 mysql 的信息表

image.png
image.png
  1. 数据对比 :::info 官方:通过以下 SQL 命令可以比对表数据量,找出数据量不相等的表重新迁移数据,结果集为空表示源端和目的端数据量一致。其中 MYSQL_TABLES 为 MySQL 迁移前统计的记录所有表数据量的辅助表,DM_TABLES 为 DM 数据库中记录表数据量的辅助表。 :::
代码语言:javascript
复制
# 注意如果没有这张表 MYSQL_TABLES,可以看一下迁移前准备的语句是不是没有执行,
# 其次看一下是不是表名大小写不一致
SELECT A.TAB_OWNER,
       A.TAB_NAME,
       A.TAB_COUNT-B.TAB_COUNT
  FROM MYSQL_TABLES A,
       DM_TABLES B
 WHERE A.TAB_OWNER=B.TAB_OWNER
   AND A.TAB_NAME=B.TAB_NAME 
   AND A.TAB_COUNT-B.TAB_COUNT<>0;

补充外键约束

如果有就补充回达梦数据库

代码语言:javascript
复制
# 找出数据库名中表用到的外键约束
SELECT
    TABLE_NAME,COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
    REFERENCED_TABLE_SCHEMA = '数据库名'
        AND REFERENCED_TABLE_NAME IS NOT NULL

查看某个表中的外键约束

代码语言:javascript
复制
show create table 表名;
代码语言:javascript
复制
# 类似于下面这一条的就是外键约束,关键字:FOREIGN KEY
CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `qrtz_job_details` (`sched_name`, `job_name`, `job_group`)

添加外键约束(达梦)

代码语言:javascript
复制
# 添加外键约束的命令
alter table "模式"."表" add constraint 约束名 foreign key ("外键列名") references "主表名" ("主键列名");
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迁移前对象统计
  • 迁移评估
    • 不兼容情况
  • 迁移前准备
    • 创建用户表空间
    • 创建用户并授予权限
  • 迁移
    • 迁移小建议
  • 统计达梦迁移后的数据
  • 数据对比
  • 补充外键约束
    • 查看某个表中的外键约束
    • 添加外键约束(达梦)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档