Mysql到DM迁移

13 篇文章 0 订阅
12 篇文章 0 订阅

目录

一.迁移流程图:

二.迁移前准备

2.1统计Mysql信息

1. mysql查询所有表和索引:

2.mysql查询所有视图:

3.mysql查询所有函数:

4.mysql查询所有存储过程:

5.mysql查询所有触发器:

2.2 创建DM实例并准备迁移环境

(1)初始化实例:

(2)修改mysql兼容参数

(3)创建表空间和用户

三.正式迁移

3.3.1 启动DTS工具

3.3.2 迁移表,索引和视图

3.3.3 迁移存储过程(改写)

3.3.4 迁移触发器(改写)

3.3.5  迁移函数(改写)

四.更新统计信息

方法一:执行sql

方法二:登录管理工具

五.数据比对

使用命令行对比


一.迁移流程图:

二.迁移前准备

2.1统计Mysql信息

对象类型:

数据库名

对象类型

对象名称

Liu

普通表

demo01    

goods     

orders    

test_index

索引

dname_index

PRIMARY

视图

test_view

函数

genPerson

存储过程

goods_proc

触发器

t1

1. mysql查询所有表和索引:

mysql>SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'liu' AND  TABLE_TYPE ='BASE TABLE';

+------------+

| TABLE_NAME |

+------------+

| demo01   |

| goods     |

| orders    |

| test_index |

+------------+

查看数据库liu下的所有索引以及对应的表:

mysql> select * from (SELECT a.TABLE_SCHEMA,

    a.TABLE_NAME,

     a.index_name,

     GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`

     FROM information_schema.statistics a

     GROUP BY a.TABLE_SCHEMA,a.TABLE_NAME,a.index_name) as b

    where b.TABLE_SCHEMA='liu';

2.mysql查询所有视图:

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'liu' AND  TABLE_TYPE ='VIEW';

+------------+

| TABLE_NAME |

+------------+

| test_view  |

+------------+

3.mysql查询所有函数:

mysql>  SELECT name from mysql.proc where db= 'liu' and type='function';

+-----------+

| name    |

+-----------+

| genPerson |

+-----------+

4.mysql查询所有存储过程:

mysql> SELECT name from mysql.proc where db= 'liu' and type='procedure';

+------------+

| name    |

+------------+

| goods_proc |

+------------+

5.mysql查询所有触发器:

mysql> SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA='liu';

+----------------+--------------+

| TRIGGER_SCHEMA | TRIGGER_NAME |

+----------------+--------------+

| liu            | t1   |

+----------------+--------------+

2.2 创建DM实例并准备迁移环境

(1)初始化实例:

<1> 建议 MySQL SQLSERVER 迁移过来的系统,使用大小写不敏感。

<2> 关于簇大小 EXTENT_SIZE缺省使用 16 页,从 MySQL移植到 DM使用默认值就可

<3> 关于页大小 PAGE_SIZE。在 DM 数据库中,页大小可以为 4KB8KB

16KB 或者 32KB,从 MySQL 移植到 DM建议设置页大小为 16KB

初始化语句:

dminit path=/dm8/dmdata PAGE_SIZE=16 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DM1 INSTANCE_NAME=DM1 PORT_NUM=5237

Root创建服务:

dm_service_installer.sh  -p DM1 -t dmserver -dm_ini /dm8/dmdata/DM1/dm.ini

Dmdba启动服务:DmServiceDM1 start

(2)修改mysql兼容参数

SQL>SP_SET_PARA_VALUE(2,'COMPATIBLE_MODE',4);

(3)创建表空间和用户

注意:

MySQL 的体系架构是单实例多库,DM7 以上的版本是单库多实例的架构, MySQL 可能是一个 root 用户访问多个库,访问前切换一下当前库即可。从MySQL 迁移到达梦的时候就需要针对 MySQL 中的每一个库在达梦里面创建一个用户和表空间来对应。例如 MySQL 中有一个库 test,达梦里面先创建一个表空间 tab_test,然后创建一个用户 test,指定默认表空间为 tab_test。迁移 MySQL 中 test 库的数据的时候,用 root 用户连接 MySQL,指定当前库为 test;用 test 用户连接达梦,这样就把 MySQLtest 库中的数据迁移到了达梦test 用户中。

创建表空间和用户:

create tablespace LIU datafile '/dm8/dmdata/DM1/liu.dbf' size 1024  autoextend on next 1 maxsize 10240 CACHE = NORMAL;

create user "LIU" IDENTIFIED BY "liu123456" DEFAULT TABLESPACE "LIU";

  1. 根据Mysql端用户进行授权

mysql> show grants for 'liu';

SQL>grant dba to liu;

SQL> grant SOI,VTI to liu;

三.正式迁移

3.3.1 启动DTS工具

3.3.2 迁移表,索引和视图

 

 

 

 

 

 

 

 

 

3.3.3 迁移存储过程(改写)

由于DM迁移工具暂时不支持迁移存储过程,这里通过对比Mysql端的创建语句在进行创建:

Mysql:SHOW CREATE procedure `goods_proc`

DM端:

SQL> create or replace procedure liu.goods_proc is

begin

select * from liu.goods;

end;

/

调用存储过程:

SQL> liu.goods_proc;

行号     GID         NAME   NUM        

---------- ----------- ------ -----------

1          1           book   19

2          2           pencel 100

3          3           ruler  25

3.3.4 迁移触发器(改写)

Mysql端查看创建语句:

mysql> show create TRIGGER `t1`;

Mysql创建触发器语句:

CREATE TRIGGER t1 --3.指定触发的时机,和要监听的表

AFTER INSERT ON orders -- 4.行触发器 固定写法

FOR EACH ROW -- 5.触发后具体要执行的事件

BEGIN -- 订单+1 库存-1

    UPDATE goods SET num = num -1 WHERE gid = 1;

END$

DM端创建:

CREATE OR REPLACE TRIGGER t1

AFTER INSERT  ON liu.orders

BEGIN

 PRINT 'update liu.goods SET num = num -1 WHERE gid = 1';--要执行的SQL

END;

/

3.3.5  迁移函数(改写)

Mysql端:

SHOW CREATE FUNCTION `genPerson` ;

创建语句:

DELIMITER $$

DROP FUNCTION IF EXISTS genPerson$$

CREATE FUNCTION genPerson(name varchar(20)) RETURNS varchar(50)

BEGIN

  DECLARE str VARCHAR(50) DEFAULT '';

  SET @tableName=name;

  SET str=CONCAT('create table ', @tableName,'(id int, name varchar(20));');

  return str;

END $$

DELIMITER ;

DM端改写:

create or replace function genPerson(name varchar(20))

RETURN varchar(50)

IS

str VARCHAR(50);

BEGIN

  str=CONCAT('create table ', liu,'(id int, name varchar(20));');

  return str;

END

/

四.更新统计信息

迁移完整的库建议按照库模式更新统计信息,凡是涉及到迁移数据的及时进行更新统计信息的操作。

方法一:执行sql

更新全库统计信息:

DBMS_STATS.GATHER_SCHEMA_STATS(

liu’,

-- LIU 为模式名

100,

FALSE,

'FOR ALL COLUMNS SIZE AUTO');

方法二:登录管理工具

库模式更新:

表模式更新:

 

 

列模式更新:

更新索引:


 

五.数据比对

使用命令行对比

  1. 对象数对比

Mysql:

数据库名

对象类型

对象名称

Liu

普通表

demo01    

goods     

orders    

test_index

索引

dname_index

PRIMARY

视图

test_view

函数

genPerson

存储过程

goods_proc

触发器

t1

DM:

SQL> select owner,object_type,count(object_name) from dba_objects where owner='LIU' group by owner,object_type order by 3;

行号     owner object_type COUNT(object_name)  

---------- ----- ----------- --------------------

1          LIU   VIEW        1

2          LIU   SCH         1

3          LIU   PROCEDURE   1

4          LIU   TRIGGER     1

5          LIU   CONSTRAINT  3

6          LIU   TABLE       4

7          LIU   INDEX       10

  1. 数据量对比

SQL> select owner,segment_name,(bytes/1024/1024) MB from dba_segments where owner='LIU'  and segment_type='TABLE';

行号     owner segment_name MB                  

---------- ----- ------------ --------------------

1          LIU   DEMO01       0

2          LIU   TEST_INDEX   0

3          LIU   ORDERS       0

4          LIU   GOODS        0

达梦云适配技术社区
https://eco.dameng.com/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值