mysql数据库迁移到达梦数据库记录
mysql数据库迁移到达梦数据库记录
达梦环境准备
初始化数据库,mysql 迁移到dm,page_size设置为16,大小写不敏感(COMPATIBLE_ MODE=4为表态参数,不能初始化指定)
./dminit path=/dm8/data PAGE_SIZE=16 EXTENT_SIZE=16 CASE_SENSITIVE=n CHARSET=1 DB_NAME=DMDB INSTANCE_NAME=DBSERVER PORT_NUM=5237
注册服务,服务类型为:dmserver,服务名为:DMSERVER
./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/DMDB/dm.ini -p DMSERVER
执行后返回:
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceDMSERVER.service to /usr/lib/systemd/system/DmServiceDMSERVER.service.
创建服务(DmServiceDMSERVER)完成
如有其它dm数据库实例注册,使用以下命令设置
cd /dm8/tool ./dbca.sh
启动数据库
systemctl start DmServiceDMSERVER.service
查看数据库启动状态
systemctl status DmServiceDMSERVER.service
作用disql登陆
./disql SYSDBA/SYSDBA@192.168.0.88:5237
查询兼容模式
SELECT para_name,para_type,para_value FROM V$DM_INI WHERE PARA_NAME ='COMPATIBLE_MODE';
返回:
LINEID para_name para_type para_value ---------- --------------- --------- ---------- 1 COMPATIBLE_MODE IN FILE 0 used time: 7.267(ms). Execute id is 57800.
- 将COMPATIBLE_MODE改为兼容mysql的模式
sp_set_para_value(2,’compatible_mode’,4);
由于需要重启才生效,重启下数据库:
systemctl restart DmServiceDMSERVER.service
再次查询返回:
SQL> SELECT para_name,para_type,para_value FROM V$DM_INI WHERE PARA_NAME =’COMPATIBLE_MODE’;
LINEID para_name para_type para_value
1 COMPATIBLE_MODE IN FILE 4
used time: 9.265(ms). Execute id is 500.
- 创建目标用户和目标表空间
从 MySQL 移植到 DM,要求先创建好待使用的用户和这个用户的表空间, 不要把数据移植到系统默认的管理员 SYSDBA 用户下和 MAIN 表空间下。
创建upms表空间,初始大小为32M, 每次自动扩展28M,最大可扩展到一个384M:
pageSize:16
create tablespace “UPMS” datafile ‘/dm8/data/DMDB/UPMS.DBF’ size 64 autoextend on next 28 maxsize 384;
Pagesize:32
创建用户upms,并关联表空间:
授权:
CREATE SCHEMA “UPMS” AUTHORIZATION “UPMS”;
mysql数据库准备
查询upms占用数据物理大小
SELECT
concat( round( sum( data_length / 1024 / 1024 ), 2 ), ‘MB’ ) AS DATA
FROM
TABLES
WHERE
table_schema = ‘upms’
查询upms中所有表数量
SELECT count(*) TABLES, table_schema FROM information_schema.TABLES
where table_schema = ‘upms’ GROUP BY table_schema;
- 归档待迁移表数据,用于检查迁移正确性
select * from MySQLs_tables;
使用开源迁移工具进行数据迁移
fork自**inrgihc**
并作如下修改:
- 修复mysql迁移到达梦数据库字符串字段长度问题的bug
- 修复中文乱码问题
- 修复int类型溢出问题
- 将jdk8升级到jdk11
- 将mysql5.7升级到mysql8.0.30
- 修改镜像打包脚本与运行,适配支持M1芯片的arm64架构
https://gitee.com/huguiqifk/dbswitch
使用DBSwitch迁移upms
迁移达梦数据库表时遇到的问题与解决方案
日期格式问题导致无法迁移成功
**官方dts方式迁移不可用: 将原datetime类型迁出为字符串类型,但此方式通过dts工具迁移出来的数据变成了不规则的未格式化的日期类型,导出后也不可用 **
只能将数据导出成sql语句,进行修改;
中文乱码问题
主要由两个问题导致:
- MySQL 用的是 UTF8MB4 字符集,迁移到 DM 数据库后中文乱码,DM 数据库目前不支持 UTF8MB4, 需要将UTF8MB4字符集换成UTF8
- 由于在达梦数据库中,UTF8字符集中,迁移过来的char或者varchar字段的值都会扩大到原来的3倍,即原来大小是50的,迁移到dm8数据库里,就占用3*150
所以在目标数据库建表语句中,对varchar和char都要乘以3
mysql定义数据库表结构与sql注意事项
- 自增id必须定义为bigInt
- Mapper.xml里定义的sql,都需要加上数据库前缀
- sql查询中不要使用函数
- 日期类型不允许值为0000-00-0000,取值范围为: ‘00:00:00.000000’和’9999-12-31 23:59:59.999999’
- 在表中不要同一字段建多个索引
- dm数据库不支持字符集为UTF8MB4,所以表字符集要改成UTF8