MySQL迁移DM

参考文档:从 MySQL 移植到 DM | 达梦技术文档

1、迁移评估

打开DM数据迁移工具(dts)

系统参数兼容:

字符集

dm:CASE_SENSITIVE 

mysql:UTF8_GENERA_CI(不区分大小写),UTF8_GENERAL_CS(区分大小写)

修改dm.ini

COMPATIBLE_MODE:4

ORDER_BY_NULLS_FLAG:2

MY_STRICT_TABLES:1

在dm管理工具,新建表空间TEST,新建用户TEST,关联表空间TEST

2、开始迁移

新建迁移:

mysql端

dm端

这里修改目的模式为TEST

迁移成功

注意:

1、在 SQL 评估阶段不兼容的对象不需要勾选,待其它对象迁移完成后,再手动修改和导入这些不兼容的对象。

2、如果数据量大,可以选择先迁移表结构定义相关内容,再迁移数据,最后迁移索引。大字段建议单独迁移,且迁移大字段建议把一次读取和一次提交的值调小,一般在20以下效率更好。

3、迁移失败的数据,手动迁移补充。

3、数据校验

mysql

统计指定库中表的数目。

SELECT COUNT(*) TABLES, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'page' GROUP BY TABLE_SCHEMA;

表信息及表数据量

SELECT TABLE_SCHEMA,TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA = 'page' ORDER BY TABLE_ROWS DESC;

达梦数据库

相关用户的对象数:

SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS WHERE OWNER='TEST' GROUP BY OBJECT_TYPE;

表信息:

SELECT OWNER,OBJECT_NAME

FROM ALL_OBJECTS

WHERE OWNER='TEST'

AND OBJECT_TYPE='TABLE'

全库核对完成后,进行一次全库的更新统计信息:

DBMS_STATS.GATHER_SCHEMA_STATS(

'TEST', --TEST 为模式名,需要根据实际情况修改为自己的模式名。

100,

FALSE,

'FOR ALL COLUMNS SIZE AUTO');

4、总结

1.迁移前需要评估迁移,根据mysql系统参数创建合适的达梦数据库实例,修改达梦数据库相关系统参数,查询mysql的数据量,应用上sql语句的兼容修改。

2.迁移的时候,注意使用已创建的模式,以及表的转换情况,查看迁移日志。

3.迁移后需要验证迁移成功的数据正确性,迁移失败的数据手动迁移补充。

4.在DM数据库:开启备份归档;慢SQL监听,修改; sql使用上的区别,例如函数。

迁移流程图

达梦社区地址:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台 

### 数据库迁移概述 为了实现从DM数据库MySQL的数据迁移,通常需要考虑多种因素和技术手段。这不仅涉及结构定义的转换,还包括实际数据记录的传输过程[^1]。 ### 使用ETL工具进行迁移 一种常见的解决方案是采用ETL(Extract, Transform, Load)工具来完成这项工作。这类工具能够帮助提取源系统的表结构和数据,并将其适配为目标系统所接受的形式。例如,在此场景下可以从DM数据库抽取数据并加载至MySQL中。常用的ETL工具有Pentaho Data Integration、Talend Open Studio等[^2]。 ### 利用中间件或脚本定制化处理 对于特定需求下的复杂情况,则可能需要用到更灵活的方式——编写自定义脚本来执行整个流程。Python作为一种强大而易学的语言非常适合此类任务;通过连接两个不同类型的数据库API接口,读取原生SQL语句的结果集再写入新的目标位置即可达成目的。下面是一个简单的例子: ```python import pymysql from sqlalchemy import create_engine source_db = 'dm://username:password@localhost/dbname' target_db = 'mysql+pymysql://root:@localhost/newdb' engine_source = create_engine(source_db) engine_target = create_engine(target_db) with engine_source.connect() as conn: result = conn.execute('SELECT * FROM some_table') data_to_insert = [dict(row) for row in result] for item in data_to_insert: insert_query = f""" INSERT INTO new_table ({', '.join(item.keys())}) VALUES (:{' , :'.join(item.keys())}); """ with engine_target.connect() as target_conn: target_conn.execute(insert_query, **item) ``` 上述代码片段展示了如何利用`sqlalchemy`库建立与两种不同类型数据库之间的连接,并实现了基本的数据复制操作[^3]。 ### 运用官方提供的迁移工具 部分商业版关系型数据库管理系统可能会自带专门用于跨平台迁移的服务组件。如果条件允许的话,建议优先尝试这些由厂商维护和支持的产品,因为它们往往针对自家产品做了优化调整,能更好地保障兼容性和稳定性[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值