目录
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');