星点匠心建站 星点匠心建站XD JIANXIN STUDIO
400-883-9527 免费定制方案
ARTICLE DETAIL

资讯详情

深耕新锐建站与运营推广的一线实战洞察。

达梦数据库(DM)Linux 下创建新实例并预防 MySQL 迁移问题

达梦数据库(DM)Linux 下创建新实例并预防 MySQL 迁移问题 达梦数据库DMLinux 下创建新实例并预防 MySQL 迁移问题适用场景宿主机已存在一个达梦实例示例/opt/dmdbms/data/DMDB端口 5236需要在不影响老实例的前提下新建一个实例专门用于承接 MySQL 迁移并通过初始化参数提前规避迁移常见问题。一、总体思路隔离新实例使用全新的空目录、不同的端口与老实例完全隔离。验证创建前先确认用户、目录、端口避免误伤老实例。参数前置把 MySQL 迁移中建库后无法修改的参数在dminit阶段一次性设对。建库后配置开启 MySQL 兼容模式等参数重启生效。迁移配合DTS 工具设置与数据库参数配合减少报错。二、创建前验证必做2.1 确认 dmdba 用户存在iddmdba预期输出类似uid1001(dmdba) gid1002(dinstall) groups1002(dinstall)2.2 确认老实例端口避开冲突ss-lntp|grepdmserver示例输出LISTEN 0 4096 *:5236 *:* users:((dmserver,pid1087,fd3))说明老实例占用5236新实例选用5237或其他未占用端口。2.3 验证新端口是否空闲ss-lntp|grep5237无输出即表示端口可用。2.4 验证目标目录是否干净ls-ld/opt/dmdbms/data/NEWDB提示No such file or directory路径干净可创建。目录已存在用ls -A /opt/dmdbms/data/NEWDB确认是否为空非空则换路径不要冒险。2.5 创建目录并授权给 dmdbamkdir-p/opt/dmdbms/data/NEWDBchowndmdba:dinstall /opt/dmdbms/data/NEWDBls-ld/opt/dmdbms/data/NEWDB确认属主为dmdba:dinstall。三、执行初始化关键参数切换到dmdba用户执行su- dmdbacd/opt/dmdbms/bin执行dminit面向 MySQL 迁移的参数已显式指定./dminitpath/opt/dmdbms/data/NEWDB\DB_NAMENEWDB\INSTANCE_NAMENEWDB\PORT_NUM5237\PAGE_SIZE16\EXTENT_SIZE32\CHARSET1\CASE_SENSITIVE0\LENGTH_IN_CHAR1\BLANK_PAD_MODE0\SYSDBA_PWD你的密码如果执行后出现初始化失败initdb V8 db version: 0x7000d file dm.key not found, use default license! License will expire on 2026-11-13 Invalid parameter:LENGTH_IN_CHAR. Input help for help information. fail to init db.原因是达梦从 2024 年第二季度之后的版本开始就正式取消了这个初始化参数。你看到的 Invalid parameter:LENGTH_IN_CHAR 正是因为版本不再支持它。社区里也有其他用户遇到过完全相同的报错官方回复的建议就是直接删除这个参数。3.1 参数说明为何这样设参数建议值原因建库后可否修改CASE_SENSITIVE0MySQL 默认大小写不敏感达梦默认敏感不关会导致查询/对象名对不上不可修改CHARSET1UTF-8对应 MySQL 的 utf8/utf8mb4不可修改LENGTH_IN_CHAR1让 VARCHAR 按字符计长避免 UTF-8 下汉字截断不可修改PAGE_SIZE16或32防止宽表/大字段迁移时报记录超长不可修改BLANK_PAD_MODE0贴近 MySQL 字符串比较不补空格的行为不可修改PORT_NUM5237避开老实例 5236可改需重启初始化成功后会输出完成提示并在/opt/dmdbms/data/NEWDB下生成dm.ini等文件。老实例目录/opt/dmdbms/data/DMDB全程未被触碰。四、注册新实例为系统服务推荐用 root 执行注册脚本便于单独启停新实例su - root/opt/dmdbms/script/root/dm_service_installer.sh\-tdmserver\-pNEWDB\-dm_ini/opt/dmdbms/data/NEWDB/dm.ini如果上面命令报错可能是目录不正确初始化时 path/opt/dmdbms/data/NEWDB实际生成的 dm.ini 在 NEWDB 子目录下完整路径应该是 /opt/dmdbms/data/NEWDB/NEWDB/dm.ini —做参考以实际情况为准/opt/dmdbms/script/root/dm_service_installer.sh\-tdmserver\-pNEWDB\-dm_ini/opt/dmdbms/data/NEWDB/NEWDB/dm.ini之后可单独启停systemctl start DmServiceNEWDB systemctl stop DmServiceNEWDB systemctl status DmServiceNEWDB与老实例的服务互不干扰。五、建库后必须做的配置防迁移报错用新实例SYSDBA登录disqlcd/opt/dmdbms/bin ./disql SYSDBA/你的密码localhost:52375.1 开启 MySQL 兼容模式SP_SET_PARA_VALUE(2,COMPATIBLE_MODE,4);4表示兼容 MySQL。静态参数需重启实例生效。5.2可选放宽严格模式若迁移遇到 MySQL 能容忍、达梦报错的数据可执行SP_SET_PARA_VALUE(2,MY_STRICT_TABLES,0);同样需重启生效可减少语法/数据格式类报错。5.3 重启新实例使参数生效systemctl restart DmServiceNEWDB重启后可通过以下命令确认SELECTPARA_NAME,PARA_VALUEFROMV$DM_INIWHEREPARA_NAMEIN(COMPATIBLE_MODE,MY_STRICT_TABLES);六、DTS 迁移工具的配合设置使用达梦 DTS 迁移 MySQL 数据时在指定复制对象步骤取消勾选保持对象名大小写。原因数据库已设为大小写不敏感对象名统一转大写后MyBatis 等应用不加双引号也能正常访问避免 MySQL 小写表名迁移后查不到。迁移前确认源库字符集与达梦CHARSET设置一致UTF-8 对 UTF-8。对大字段/宽表确认PAGE_SIZE足够16K/32K。七、整体检查清单dmdba用户存在老实例端口已确认5236新端口5237空闲新目录不存在或为空属主为dmdba:dinstalldminit显式指定CASE_SENSITIVE0、CHARSET1、LENGTH_IN_CHAR1、PAGE_SIZE16/32、BLANK_PAD_MODE0新实例服务已注册可独立启停COMPATIBLE_MODE4已设置并重启生效可选MY_STRICT_TABLES0已设置DTS 迁移时取消保持对象名大小写迁移后抽查汉字长度、大小写查询、宽表数据八、常见风险提示切勿把PATH指向老实例目录/opt/dmdbms/data/DMDB否则可能报错或覆盖。端口不能与老实例相同否则新实例启动失败。CASE_SENSITIVE、LENGTH_IN_CHAR、CHARSET、PAGE_SIZE建库后不可改这次初始化是最后纠正机会。COMPATIBLE_MODE是静态参数改完必须重启否则不生效。迁移前建议对老实例和新实例分别做一次备份/快照作为兜底。
返回列表