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

记一次麒麟 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 用户,将达梦的环境变量永久写入配置文件:

Bash 复制代码
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:交互式输入密码(推荐)

    Bash 复制代码
    disql YYJX_YGJ_PROD@127.0.0.1:15236
    # 输入口令:Dameng#123
  • 方式 B:命令行转义密码

    Bash 复制代码
    disql "YYJX_YGJ_PROD/"Dameng#123"@127.0.0.1:15236"

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

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

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

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

Bash 复制代码
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 中导入执行

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

SQL 复制代码
-- 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 登录,创建的所有表都会自动归属于该模式下。如需切换模式,请使用:

    SQL 复制代码
    SET SCHEMA SCHEMA_NAME;
  2. 查看当前模式/用户 :

    SQL 复制代码
    SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL;
  3. 退出终端 : 使用 exit 或 quit 退出,不支持 PostgreSQL/MySQL 风格的 \q。

五、 总结

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

相关推荐
AC赳赳老秦1 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
不才不才不不才1 小时前
Spring 源码系列(29): 20 道高频面试题源码级解析合集
java·后端·spring
索隆zoro1 小时前
Army 的可插拔架构:army-jdbc 与方言模块
java·后端
小蒜学长1 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
布莱克6053 小时前
MySQL 增删改查(CRUD)语法详解
数据库·mysql·增删改查
Dovis(誓平步青云)3 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
蜗牛互联网3 小时前
从Barclays扩大Claude部署看受监管软件工程的责任重分配
java·大数据·人工智能·后端·软件工程
2501_933670793 小时前
2027届大数据管理与应用求职数字化转型顾问:项目、SQL、业务理解怎么排优先级
数据库·sql
周杰伦fans4 小时前
C#对话摘要降低Token消耗
人工智能·后端·c#
东方护航数据恢复(深圳)4 小时前
物流案例:勒索病毒 Mallox 加密 ERP 数据库,旧备份 + 残留页重组实录【东方护航数据恢复深圳店】
数据库·数据恢复·勒索病毒·二次开盘·开盘·数据镜像