MySQL 5.7.27 迁移 DM 8

本文详细介绍了如何从MySQL5.7.27迁移到达梦DM8数据库,包括迁移前对象统计、创建用户表空间、用户权限分配、迁移评估、数据准备、外键约束处理以及数据对比等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

:::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. 统计指定库中表的数目
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '数据库名称' GROUP BY TABLE_SCHEMA;
  1. 统计指定库中视图的数目
SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS  
WHERE TABLE_SCHEMA  = '数据库名称'  GROUP BY TABLE_SCHEMA;
  1. 统计指定库中所有的存储过程
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE' AND ROUTINE_SCHEMA='数据库名称';
  1. 统计指定库中所有的函数
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='FUNCTION' AND ROUTINE_SCHEMA='数据库名称';
  1. 统计指定库中所有的触发器
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS 
WHERE TRIGGER_SCHEMA= '数据库名称';
  1. 将指定库中所有表数据量记录到辅助表
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

  1. 填写达梦数据源(目的数据库)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 选择评估的项目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 指定要评估的数据库模式,勾选 MySQL 中需要迁移的库进行评估。

image.png

  1. 选择 MySQL 库中具体需要评估的对象(表)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 确认评估任务后开始评估

image.png

  1. 查看评估报告

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 库迁移过来的数据

-- 创建表空间dbtest,数据文件为DBTEST.DBF。
create tablespace "dbtest" datafile '/data/dmdata/DAMENG/DBTEST.DBF' size 2048 ;

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

创建用户并授予权限

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

-- 创建用户
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

  1. 选择迁移方式

image.png

  1. 填写数据源信息(源数据库)

image.png
image.png
image.png

  1. 填写达梦数据库信息(目的数据库)
    :::info
    注意:这里登录的用户信息要使用新建的用户
    :::
    image.png

  2. 选择迁移选项

image.png
image.png

  1. 选择要迁移的数据库

eabe859b727b063acb08e785e94a8b4.png

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

  2. 自定义对象迁移策略

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

image.png
92cd5ebcfcc1c2d70b387236c3a11f0.png

  1. 点击完成,开始迁移

点击下一步 -> 点击完成

image.png

迁移小建议

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

    1. 迁移表和索引

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

image.png

  1. 迁移数据

image.png

统计达梦迁移后的数据

  1. 统计达梦数据库中相关用户的对象数
# OWNER 后面要替换成自己的用户名
SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS WHERE OWNER='USER_NAME' GROUP BY OBJECT_TYPE;
  1. 统计 MySQL 迁移过来的表的数据量并记录到辅助表
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

  1. 数据对比
    :::info
    官方:通过以下 SQL 命令可以比对表数据量,找出数据量不相等的表重新迁移数据,结果集为空表示源端和目的端数据量一致。其中 MYSQL_TABLES 为 MySQL 迁移前统计的记录所有表数据量的辅助表,DM_TABLES 为 DM 数据库中记录表数据量的辅助表。
    :::
# 注意如果没有这张表 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;

补充外键约束

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

# 找出数据库名中表用到的外键约束
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

查看某个表中的外键约束

show create table 表名;
# 类似于下面这一条的就是外键约束,关键字: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`)

添加外键约束(达梦)

# 添加外键约束的命令
alter table "模式"."表" add constraint 约束名 foreign key ("外键列名") references "主表名" ("主键列名");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值