记一次麒麟 Linux 下达梦数据库 (DM8) 部署与 MySQL 命令行无界面迁移踩坑指南

0 阅读3分钟

记一次麒麟 Linux 下达梦数据库 (DM8) 部署与 MySQL 命令行无界面迁移踩坑指南

摘要:本文记录了在国产银河麒麟 OS 上接手达梦数据库(DM8)时,遇到的动态库缺失、特殊字符登录失败、命令行下 MySQL 脚本兼容性处理及模式(Schema)映射等一整套实战排坑全过程。

一、 常见坑点与排查过程

1. 运行 disql 提示 error while loading shared libraries

  • 问题现象: 直接执行 /data/dmdbms/bin/disql 时,系统报错: error while loading shared libraries: libdisql_dll.so: cannot open shared object file: No such file or directory
  • 原因分析: 达梦是以 dmdba 用户身份安装的,root 或未加载环境变量的用户缺少 LD_LIBRARY_PATH 动态链接库路径。

2. 执行登录命令时遭遇“创建SOCKET连接失败”或“未连接”

  • 问题现象: 执行 /data/dmdbms/tool/disql SYSDBA/JX_sysdba2025@localhost:5236 提示 -70028:创建SOCKET连接失败
  • 原因分析
    1. 达梦默认端口为 5236,但现场实例实际监听的是 15236(可通过 ss -ntlpu | grep dmserver 确认)。
    2. 密码中包含特殊字符(如 #^)时,直接写在命令行中会被 Bash Shell 截断或转义,导致认证失败。

二、 核心解决方案与最佳实践

步骤 1:配置环境(解决动态库与命令找不到问题)

切换到 dmdba 用户,将达梦的环境变量永久写入配置文件:

su - dmdba
cat << 'EOF' >> ~/.bash_profile
export DM_HOME=/data/dmdbms
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
EOF
source ~/.bash_profile

步骤 2:终端安全登录(解决特殊字符转义)

连接时务必显式指定端口 15236。若密码含特殊字符,建议采用以下两种方式之一:

  • 方式 A:交互式输入密码(推荐)
    disql YYJX_YGJ_PROD@127.0.0.1:15236
    # 输入口令:Dameng#123
    
  • 方式 B:命令行转义密码
    disql "YYJX_YGJ_PROD/"Dameng#123"@127.0.0.1:15236"
    

三、 纯命令行(无 GUI)下迁移 MySQL 数据至达梦

在没有图形界面(DTS 工具)的 Linux 服务器上,若需导入 MySQL 的备份 SQL 脚本,请按以下流程处理:

1. 清洗 MySQL 特有语法(Bash 预处理)

在 Linux 终端下使用 sed 命令快速剔除达梦不识别的 MySQL 引擎和字符集关键字:

sed -i.bak \
  -e 's/`//g' \
  -e 's/ENGINE=InnoDB[^;]*/ /gi' \
  -e 's/ENGINE=MyISAM[^;]*/ /gi' \
  -e 's/DEFAULT CHARSET=[^;]*/ /gi' \
  -e 's/COLLATE=[^;]*/ /gi' \
  /data/mysql_backup.sql

2. 在 disql 中导入执行

登录达梦客户端后,按顺序执行:

-- 1. 关闭 & 符号变量解析(注意:DEFINE 和 OFF 之间有空格)
SET DEFINE OFF;
-- 2. 忽略不影响主流程的语法错误,保证全量脚本持续运行
SET FERROFF ON;
-- 3. 导入 SQL 脚本
start /data/mysql_backup.sql;

四、 达梦数据库核心概念认知避坑

  1. 关于 USE database; : 达梦数据库没有 USE 概念。在达梦中,用户登录后默认自动绑定并进入同名的模式(Schema) 。用 YYJX_YGJ_PROD 登录,创建的所有表都会自动归属于该模式下。如需切换模式,请使用:
    SET SCHEMA SCHEMA_NAME;
    
  2. 查看当前模式/用户
    SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL;
    
  3. 退出终端: 使用 exitquit 退出,不支持 PostgreSQL/MySQL 风格的 \q

五、 总结

国产数据库在兼容性上已经做得相当出色(如配置了“大小写不敏感”和“兼容 MySQL”)。在运维和部署过程中,厘清 Linux 用户环境变量处理好特殊字符转义以及理解模式(Schema)概念是保障项目顺利上云/国产化替换的关键。