目录
1.MySQL 源端信息
2.DM 目的端信息
3.迁移评估
4.数据库迁移
4.1源端 MySQL 准备
4.2目的端达梦准备
初始化参数设置
兼容性参数设置
创建迁移用户和表空间
4.3迁移步骤
创建迁移
配置迁移对象及策略
开始迁移
对象补迁
5.数据校验
统计 MySQL 端对象及数据
统计 DM 端对象及及数据
6.统计信息与备份
更新统计信息
备份
7.应用迁移
1.MySQL 源端信息
调研项 | 说明 |
数据库架构 | 单机 |
节点数 | 1 |
数据库版本 | MySQL 8.0 |
待迁移库 | dbtest |
IP 地址/端口 | 192.168.32.128/3306 |
服务器运维用户名(密码) | root |
数据库用户名(密码) | xxxxx |
字符集编码 | UTF-8 |
大小写敏感 | 不敏感 |
是否以字节为单位 | 是 |
归档保留策略 | / |
统计指定库中表的数目。
SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'eyoucms' GROUP BY TABLE_SCHEMA;
统计指定库中视图的数目
SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'eyoucms' GROUP BY TABLE_SCHEMA;
统计指定库中所有的存储过程、函数
SELECT `NAME` FROM MYSQL.PROC WHERE DB = 'eyoucms' AND `TYPE` = 'FUNCTION';
统计指定库中所有的触发器
SELECT TRIGGER_SCHEMA ,TRIGGER_NAME FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA= 'eyoucms';
将指定库中所有表数据量记录到辅助表
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 = 'eyoucms' ORDER BY TABLE_ROWS DESC;
2.DM 目的端信息
调研项 | 调研命令 |
服务器品牌/型号 | dmidecode |
服务器操作系统 | cat /etc/os-release |
内存容量 | cat /proc/meminfo |
CPU 型号/核数 | cat /proc/cpuinfo |
端口策略 | 是否与目的端网络、端口互通 |
安全策略 | 是否有软件、硬件相关安全限制(比如堡垒机、网闸、文件摆渡) |
是否具备可视化界面 | 可视化提供的方式(直连、Xmanager、VNC、BMC 等) |
其他 | / |
3.迁移评估
勾选评估内容
指定要评估的数据库模式,勾选 MySQL 中需要迁移的库进行评估。
选择 MySQL 库中具体需要评估的对象
确认评估任务后开始评估
评估完成后可点击右下方的“查看报告”,查看详细的评估报告
这里全部兼容,如果有不兼容的,可单独进行修改迁移。
4.数据库迁移
4.1源端 MySQL 准备
在正式开始移植前需要停止所有对源端 MySQL 数据库的变更操作
4.2目的端达梦准备
初始化参数设置
数据库参数 | 参数值 |
DB_NAME(数据库名) | DAMENG(根据需求设置) |
INSTANCE_NAME(实例名) | DMSERVER(根据需求设置) |
PORT_NUM(端口) | 5236(正式移植环境下,为保证数据库安全,不建议使用默认端口 5236) |
管理员、审计员、安全员密码(安全版本特有) | 不推荐使用默认密码 |
EXTENT_SIZE(簇大小) | 16 |
PAGE_SIZE(页大小) | 32 |
LOG_SIZE (日志大小) | 2048M |
CHARSET(字符集) | UTF-8(一般是 UTF8,根据实际要求设置) |
CASE_SENSITIVE(大小写敏感) | 不敏感(一般是不敏感,根据实际要求设置) |
BLANK_PAD_MODE(尾部空格填充) | 否 |
其中页大小(page_size)、簇大小(extent_size)、大小写敏感(case_sensitive)、字符集(charset)、结尾空格填充(BLANK_PAD_MODE)一旦确定无法修改,需谨慎设置。
(1)CASE_SENSITIVE 大小写是否敏感设置。CASE_SENSITIVE=1 大小写敏感,包含 2 层意思:
① 表中数据:区分大小写。
② 对象名:对象名区分大小写。
兼容性参数设置
参数名 | 含义 | 建议值 |
COMPATIBLE_MODE | 是否兼容其他数据库模式。0:不兼容,1:兼容 SQL92 标准 2:兼容 ORACLE 3:兼容 MS SQL SERVER 4:兼容 MYSQL 5:兼容 DM6 6:兼容 TERADATA。 | 4(表示部分语法兼容 MYSQL),重启数据库生效。 |
ORDER_BY_NULLS_FLAG | 控制排序时 NULL 值返回的位置,取值 0、 1、2。 0 表示 NULL 值始终在最前面返回; 1 表示 ASC 升序排序时 NULL 值在最后返回, DESC 降序排序时 NULL 值在最前面返回, 在参数等于 1 的情况下, NULL 值的返回与 ORACLE 保持一致; 2 表示 ASC 升序排序时 NULL 值在最前面返回, DESC 降序排序时 NULL 值在最后返回,在参数等于 2 的情况下, NULL 值的返回与 MYSQL 保持一致。 | 2(兼容 MYSQL)。 |
MY_STRICT_TABLES | 是否开启 STRICT 模式(严格模式),仅在 COMPATIBLE_MODE=4 时有效。0:不开启,数据超长时自动截断;字符类型转换数值类型(包括 INT、SMALLINT、TINYINT、BIGINT、DEC、FLOAT、DOUBLE)失败时,转换为 0;1:开启,数据超长或计算错误时报错。 | 建议值:1。 |
创建迁移用户和表空间
针对 MySQL 中的每一个库在达梦里面创建一个用户和表空间来对应。例如 MySQL 中有一个库 dbtest,达梦里面先创建一个表空间 dbtest,然后创建一个用户 DBTEST,指定默认表空间为 dbtest。
create tablespace eyoucms datafile '/dm/data/DAMENG/eyoucms01.dbf' size 128 autoextend on next 32 maxsize 1024;
create user eyoucms identified by "eyoucms123" default tablespace eyoucms;
grant public,resource,soi,svi,vti to eyoucms;
4.3迁移步骤
创建迁移
新建迁移工程
选择迁移方式为 “MySQL ==> DM”
配置数据源
配置迁移对象及策略
迁移对象方式及迁移策略中勾选“保持对象名大小写”
在这里勾选了“使用默认数据类型映射关系”,如果后面又自定义了数据类型映射关系,DTS 会优先选择使用自定义的数据映射关系
注意修改字符长度,字符集CHARSET=0代表使用GB18030,即一个中文两个字节。CHARSET=1代表使用UTF-8,即一个中文3个字节,查看字符集select UNICODE ();
默认映射关系:
勾选源端待迁移的数据库
这里不再勾选“创建模式”
勾选源端数据库中需要迁移的对象
在 SQL 评估阶段不兼容的对象不需要勾选,待其它对象迁移完成后,再手动修改和导入这些不兼容的对象
右上角“分析源对象”,可查看源端对象统计:
可点击转换进行自定义对象迁移策略
迁移策略
在迁移策略中可根据需要设置表及数据迁移的策略
一般先迁移表,再迁移主键、索引和约束
部分选项说明:
① 压缩:指定迁移的目的表是否按照压缩方式存储。
② 强制聚集索引:即使源表的主键为非聚集主键,创建目的表时也会被转换为聚集主键。
③ 强制非聚集索引:即使源表的主键为聚集主键,创建目的表时也会被转换为非聚集主键。
④ 启用标志列插入:如果表上有标志列,则迁移数据时会强制向标志列插入值,以保证源和目的数据完全一致。
⑤ 显示行数:将在迁移任务过程中,显示数据的行数。
⑥ 拷贝记录:如果目的表已存在,直接拷贝记录,不需要创建表。
⑦ 删除后拷贝记录:迁移过程中先删除已存在的目的表,再重新创建新目的表。
⑧ 源一次读取行数:设置从数据源中读取数据时每次读取数据的行数,该参数决定内存中缓存结果集的大小,对于数据量很大的数据源,设置该参数,可以控制内存的使用。
⑨ 目的一次提交行数:设置向目的数据库中每次写入数据的行数。当数据量比较大时,减小该参数的值可以减少内存的使用。但会影响迁移的速度。
⑩ 缓存批数:设置缓存队列的长度。调整该参数可以调整迁移过程中内存的使用。
列映射选项
可根据需求修改映射信息,根据需要勾选“应用当前选择项到其他同类对象”
开始迁移
检查迁移任务,确认迁移对象是否正确
有迁移失败,和因为失败取消的任务。
对象补迁
通过“查看详细信息”,记录每一个失败的表。
例以上第一个失败:
由于达梦中文字符集char类型存放一个中文字符是2个字节,这里需要在“配置对象及策略”里,修改字符字符长度为2。
可以重新建一个迁移,选择刚才失败的表,重新做一次迁移。
5.数据校验
统计 MySQL 端对象及数据
见“Mysql源端信息”章节
统计 DM 端对象及及数据
统计达梦数据库中相关用户的对象数
SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS WHERE OWNER='EYOUCMS' GROUP BY OBJECT_TYPE;
统计表数据
CREATE TABLE DM_TABLES
(
TAB_OWNER VARCHAR(100),
TAB_NAME VARCHAR(100),
TAB_COUNT INT
);
declare
v_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt VARCHAR2(200);
num_rows number;
begin
for rec in (SELECT OWNER,OBJECT_NAME FROM ALL_OBJECTS WHERE OWNER='EYOUCMS' AND OBJECT_TYPE='TABLE')---owner根据实际情况调整
loop
select rec.owner,rec.OBJECT_NAME into v_owner,v_tabname from dual;
stmt := 'select count(*) from "' || v_owner || '"."' || v_tabname || '"';
EXECUTE IMMEDIATE stmt INTO num_rows;
EXECUTE IMMEDIATE 'insert into dm_tables values('''||v_owner||''','''||v_tabname||''','''||to_number(num_rows)||''')';
EXECUTE IMMEDIATE 'commit';
end loop;
end;
6.统计信息与备份
更新统计信息
按模式更新统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('DBTEST',100,FALSE,'FOR ALL COLUMNS SIZE AUTO');
--DBTEST 为模式名,需要根据实际情况修改为自己的模式名。
如果数据量较大,该过程执行较慢,需要等待一段时间。
按表进行统计信息的收集:
DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');