MySQL迁移达梦DM8实战
准备
在迁移前,先在本地数据库新建一个空库,并将要迁移到达梦数据库的MySQL数据库复制到本地的这个空库中,因为接下来需要修改某些表的设置。
- CURRENT_TIMESTAMP
CURRENT_TIMESTAMP
是MySQL的函数,达梦不支持该函数,如果使用了这个函数,那么需要修改。
例如将TABLE_NAME
表中的updated_at
字段修改为datetime
类型,并去掉默认值。
ALTER TABLE `TABLE_NAME` MODIFY COLUMN `updated_at` datetime(0) NULL;
-
0000-00-00 00:00:00
如果你的时间字段中有0000-00-00 00:00:00
这样的数据,也是无法迁移成功的,可以批量改为1970-01-01 00:00:00
。 -
修改char为varchar
有的字段设置了默认值时,迁移时可能会提示长度不足。
例如设定了user_sex这个字段为char(1)
,默认值为男
,那么需要改为char(3)
或者改为varchar(1)
注意:varchar的长度与你初始化数据库时的这两个参数UNICODE_FLAG
和LENGTH_IN_CHAR
相关。
UNICODE_FALG
:此参数表示了数据库中所有数据的字符集,包括数据字典的字符集。需要注意的是,数据库一旦初始化完成,字符集就将无法修改。我们可以使用select unicode
来查询当前数据库的字符集种类,0
代表gb18030
,1
代表UTF8
。
LENGTH_IN_CHAR
:此参数决定了,数据库中的varchar类型对象的长度是否以字符为单位。取值为1则设置为以字符为单位,将存储长度值按照理论字符长度进行放大。取值为0则所有varchar类型对象的长度以字节为单位。
- enum类型
例如enum('男','女')
这种类型的字段需要改为
ALTER TABLE `TABLE_NAME` MODIFY COLUMN `user_sex` varchar(1) DEFAULT '男';
新建达梦数据库用户
新建表空间
使用SYSDBA
用户登录DM管理工具
,新建两个表空间:TEST_DATA
、TEST_IDX
,分别用于存储表和索引。
新建用户
新建管理用户,选择刚创建的两个表空间,密码长度至少为9位。
所属角色,勾选PUBLIC
勾选需要的权限
新建用户后,将出现同名的模式。
断开连接,使用刚创建的TEST
用户登录。
使用DM数据迁移工具
-
新建迁移工程,选择迁移方式
-
选择目的模式,勾选保持对象名大小写
注意事项
当某些表迁移失败时,注意要在达梦中删除表后,再重新迁移。