【达梦8】mysql迁移测试

迁移概述

(1)分析待移植系统,确定移植对象
(2)通过数据迁移工具DTS完成常规数据库对象以及数据的迁移
(3)DM 数据库和 MySQL 体系结构上存在差异,SQL 语法也存在一定的差异
(4)移植完成后对移植的结果进行校验,确保移植的完整性和正确性
(5)对应用系统进行移植、测试和优化

迁移前准备

1、统计mysql信息

迁移前先统计出需要迁移的库中的对象,提前了解迁移数据量、迁移数据对象、迁移数据类型为考虑迁移时长、周期提供依据。

1)确认mysql目标与参数

在这里插入图片描述

—查看参数设置
mysql> show variables;
—查看参数文件
[mysql@mysql test_db]$ vim /mysql/3306/my.cnf

2)统计数据对象

(1)统计目标database表数量

SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘employees’ GROUP BY TABLE_SCHEMA;
在这里插入图片描述

(2)统计目标database视图数量

SELECT TABLE_SCHEMA,COUNT(*) VIEWS FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ‘employees’ GROUP BY TABLE_SCHEMA;
在这里插入图片描述

(3)统计目标database函数、存储过程、触发器数量

—统计函数
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE=‘FUNCTION’ AND ROUTINE_SCHEMA=‘employees’;
—统计触发器
SELECT TRIGGER_SCHEMA,TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA= ‘employees’;
—统计存储过程
SELECT SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE=‘PROCEDURE’ AND ROUTINE_SCHEMA=‘employees’;
在这里插入图片描述

(4)创建辅助表

—创建辅助表
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 = ‘employees’ ORDER BY TABLE_ROWS DESC;
—查看各表数据
select * from MYSQL_TABLES
在这里插入图片描述

2、目的端达梦的创建

1)选择合适的版本

(1)建议使用当前最新版本的数据库,以保证功能全面和兼容性更强
(2)版本优先选择安装完整版
(3)版本与硬件环境一定要严格匹配,以减少干扰性的问题出现

2)选择合适的初始化参数

(1)页大小:数据页大小。页大小设置越大,最后数据文件的物理大小就越大,系统运行时每次从磁盘调入内存的数据单位就越大。
(2)簇大小:数据文件使用的簇大小
(3)大小写敏感: MYSQL 设置大小写敏感的细粒度可到字段级别,达梦是实例级别的,一旦设置,后续不可修改
(4)字符集: MYSQL 建表默认的字符编码是 UTF8_GENERAL_CI,所以建议在 MYSQL 迁移到 DM 时,在达梦端设置成大小写不敏感 CASE_SENSITIVE=0。如果 MYSQL 系统中使用的字符编码是 UTF8_GENERAL_CS,那么建议达梦端设置成大小写敏感 CASE_SENSITIVE=1。
(5)LENGTH_IN_CHAR:MYSQL4.0 以下版本以字节为单位,5.0 以上版本以字符为单位,当前一般是 5.0 以上,所以一般选择设置 1,该参数只能初始化阶段设置,后续不能修改。

3)配置合适的INI参数

(1)buffer和max_buffer:根据服务器运行服务所占资源进行分配,避免DM征用系统大量内存资源导致其他应用受影响。建议物理内存一半,且buffer=max_buffer。
(2)max_sessions:根据MySQL实际应用连接情况设置,避免迁移后创建连接过多导致的应用无法连接。
(3)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保持一致。
(4)compatible_mode:0不兼容;1兼容SQL92标准;2兼容oracle;3兼容MS SQL SERVER;4兼容mysql;5兼容DM6;6兼容Teradata。4表示部分语法兼容mysql,重启数据库生效

4)设置合理的日志参数

扩大在线日志文件。在dts迁移过程中涉及到大量的读写操作,为避免redolog频繁切换,建议增大。

5)创建用户和表空间

(1)创建新的用户和表空间,不要把迁移数据迁移到系统管理员用户下和main表空间下
(2)明确源端要迁移的用户,在目标端创建对应的用户和表空间
(3)明确用户对象,并不是所有的用户对象都需要迁移
(4)避免多个分区表使用一个表空间导致过快达到maxsize
(5)明确目标用户所拥有的权限,避免后期因权限问题导致的对象无法操作

3、制定迁移计划

(1)选择合理的迁移顺序:先序列,再表,最后视图
(2)对于数据量大的表单独迁移
(3)对于分区表若数据量没有超过1亿建议迁移成普通表,在分区列上创建索引
(4)对于大字段较多的表,需修改批量提交的行数,避免迁移工具内存溢出

4、迁移前评估

通过DTS工具的评估模块对源端数据库进行迁移评估,包括数据对象和 SQL ,最终形成迁移评估报告。可通过迁移评估报告提前了解哪些数据对象或 sql 需要单独处理,方便后续迁移的顺利进行。

1)评估测试

—新建迁移评估
在这里插入图片描述
—连接源端MySQL
在这里插入图片描述

注:
当使用达梦迁移工具连接 mysql 5.7 时可能报错:“Communications link failure The last packet successfully received from the server was 20 milliseconds ago. The last packet sent successfully to the server was 20 milliseconds ago.”。

遇到报错时可进行以下排查:
(1)排查是否为网络问题导致连接不上 mysql 数据库,检查网络端口是否开放
(2)排查 mysql 数据库最大连接数设置或者连接超时问题
(3)是否由 SSL 协议导致,若是可进行如下操作,在URL里面添加&useSSL=false&,不进行SSL连接,通过账号密码进行连接。

2)选择评估项

—进行评估选项
在这里插入图片描述
—选定评估目标
在这里插入图片描述
在这里插入图片描述

3)获取评估信息

—源端信息预览
在这里插入图片描述
—评估结果
在这里插入图片描述

从评估结果中可以看到,源端的评估存在不兼容的情况,仔细查看日志,发现源端不兼容的对象是由于不存在相关表所造成的。在后面的正式迁移过程中,可以对该对象进行单独的处理。

迁移测试

1、确认源端MySQL信息

可通过DTS工具的评估模块获取源端MySQL信息。
在这里插入图片描述

2、创建目标端DM实例

—初始化实例
dminit PATH=/dmdata DB_NAME=my57 INSTANCE_NAME=my57 SYSDBA_PWD=dameng123 SYSAUDITOR_PWD=dameng123 PAGE_SIZE=16 EXTENT_SIZE=32 LENGTH_IN_CHAR=0 LOG_SIZE=1024 CASE_SENSITIVE=N CHARSET=1 PORT_NUM=8236
—实例启动测试
[dmdba@dm ~]$ /dmsoft/dmdbms/bin/dmserver /dmdata/my57/dm.ini
—修改ini参数(测试环境内存为4G)
Vim /dmdata/orcl/dm.ini
MAX_OS_MEMORY = 80
BUFFER = 2000
COMPATIBLE_MODE = 4
ORDER_BY_NULLS_FLAG=2
—修改日志大小
SQL> select * from v$rlogfile;
SQL> alter database resize logfile ‘my5701.log’ to 2048;
SQL> alter database resize logfile ‘my5702.log’ to 2048;
—创建用户和表空间
SQL> create tablespace emp DATAFILE ‘emp.DBF’ size 128 autoextend on next 1024 maxsize 65536;
SQL> create user employees identified by “dameng123” default tablespace emp;

3、DTS连接

1)选择迁移类别

在这里插入图片描述

2)测试源端连接

在这里插入图片描述

3)测试目标端连接

在这里插入图片描述

4、选择迁移目标

在这里插入图片描述

—这里不需要创建模式,在准备过程中创建用户时已经创建
在这里插入图片描述

5、迁移目标

1)迁移表

在这里插入图片描述
在这里插入图片描述

2)迁移视图

在这里插入图片描述
在这里插入图片描述

3)迁移剩余对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在之前的迁移评估时,最终的评估信息显示会有一个存储过程的报错,在迁移剩余对象时果然出现了报错,通过错误信息获取创建语句进行单独处理。

迁移后注意

1、统计目的端对象和数据

1)统计表和数据量

—创建统计表
create table table_count (owner varchar(100),table_name varchar(100),cnt int);
—统计各表数据量
declare
v_owner VARCHAR2(100);
v_tabname VARCHAR2(100);
stmt VARCHAR2(200);
num_rows number;
begin
for rec in (select owner,table_name from dba_tables where owner=‘EMPLOYEES’ order by 1, 2)—owner根据实际情况调整
loop
select rec.owner,rec.table_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 table_count values(’‘’||v_owner||‘’‘,’‘’||v_tabname||‘’‘,’‘’||to_number(num_rows)||‘’‘)’;
end loop;
end;
—查询验证数据量
select * from “SYSDBA”.“TABLE_COUNT”;
在这里插入图片描述

2)统计对象

—查询并统计迁移对象
SELECT
A.USERNAME “用户名”,
(SELECT COUNT(1) FROM DBA_TABLES B WHERE B.OWNER = A.USERNAME) “表数量”,
( SELECT COUNT(1) FROM DBA_VIEWS G WHERE G.OWNER = A.USERNAME ) “视图数量”,
( SELECT COUNT(1) FROM DBA_TRIGGERS H WHERE H.OWNER = A.USERNAME ) “触发器数量”,
( SELECT COUNT(DISTINCT I.NAME) FROM DBA_SOURCE I WHERE I.OWNER = A.USERNAME AND I.TYPE = ‘FUNCTION’ ) “函数数量”,
( SELECT COUNT(1) FROM DBA_SEQUENCES J WHERE J.SEQUENCE_OWNER = A.USERNAME ) “序列数量”,
( SELECT COUNT(DISTINCT L.NAME) FROM DBA_SOURCE L WHERE L.OWNER = A.USERNAME AND L.TYPE = ‘PROCEDURE’ ) “存储过程数量”,
( SELECT COUNT(1) FROM DBA_DB_LINKS M WHERE M.OWNER = A.USERNAME ) “DBLINK数量”,
( SELECT COUNT(1) FROM DBA_INDEXES I WHERE UNIQUENESS = ‘UNIQUE’ AND OWNER =A.USERNAME OR INDEX_NAME NOT LIKE ‘INDEX335%’ AND OWNER =A.USERNAME) “索引数量”,
( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE=‘TYPE’ AND OWNER =A.USERNAME OR OBJECT_TYPE=‘CLASS’ AND OWNER =A.USERNAME ) “自定义类型”,
( SELECT COUNT(1) FROM DBA_OBJECTS WHERE OBJECT_TYPE=‘PACKAGE’ AND OWNER =A.USERNAME) “PKG数量”
FROM
DBA_USERS A WHERE A.USERNAME IN (‘EMPLOYEES’);
在这里插入图片描述

2、更新统计信息

数据核对完成后,应进行一次统计信息的更新。更新统计信息的目的是,在大批量迁移数据后,可能会导致数据库优化器根据错误的统计信息得到错误的查询计划,从而影响最终的查询结果。

SQL> call DBMS_STATS.GATHER_SCHEMA_STATS(‘EMPLOYEES’);

3、数据备份

在数据更新完统计信息后,在磁盘空间充足的情况下进行一次数据备份。

RMAN> backup database ‘/dmdata/my57/dm.ini’ full backupset ‘/dmbak/my57_full’;

4、开启SQL日志

数据库和应用系统迁移完成后开启SQL日志,对系统进行全方面测试,排查迁移过程中错误的地方,对慢SQL语句进行优化。在测试完成后要关闭追踪日志。

—开启SQL追踪
SP_SET_PARA_VALUE(1,‘SVR_LOG’,1);
—关闭SQL追踪
SP_SET_PARA_VALUE(1,‘SVR_LOG’,0);

社区地址:https://eco.dameng.com

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
达梦数据库是一种支持大规模数据存储和处理的数据库管理系统。要将MySQL数据库迁移达梦数据库,我们需要以下步骤: 1.备份MySQL数据库:首先,我们需要使用MySQL提供的备份工具对数据库进行备份,以确保数据的完整性和安全性。 2.安装达梦数据库:在目标服务器上安装达梦数据库,并确保数据库可以正常工作。根据操作系统的要求进行安装,一般包括下载安装文件、运行安装程序和配置数据库参数。 3.转换数据:使用达梦数据库提供的数据迁移工具(如dmt2dmd)将MySQL数据库中的数据转换为达梦数据库所需的格式。这个工具可以将MySQL的表、视图、索引、触发器等对象转换为达梦数据库可以识别的格式,保持数据的一致性。 4.迁移数据:将转换后的数据导入到达梦数据库中。使用达梦提供的数据导入工具(如dmloader)将数据文件导入到达梦数据库中,确保数据的完整性和一致性。 5.测试和验证:迁移完成后,对达梦数据库进行测试和验证,以确保迁移过程没有出现问题,并且数据可以正常访问和操作。在此过程中,可以检查数据的完整性、查询性能和应用程序的稳定性。 6.切换应用程序:在确认达梦数据库工作正常后,可以通过更新应用程序的数据库连接信息,将应用程序指向达梦数据库。在切换之前,可以先进行一段时间的并行测试,确保应用程序在新的数据库上运行正常。 通过以上步骤,我们可以成功地将MySQL数据库迁移达梦数据库迁移过程需要仔细规划和执行,以确保数据的完整性和一致性,并减少应用程序的停机时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值