记一次麒麟 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)概念是保障项目顺利上云/国产化替换的关键。

相关推荐
泡海椒7 小时前
JQuick-SQL REST API 数据接入:应用层调用接口后注册分析表
数据库·sql·1024程序员节
程序猿乐锅7 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
code2cat7 小时前
Java高级篇之Hibernate:让对象映射到表,理解持久化与事务
java·后端·hibernate·1024程序员节
Random Glow7 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
Younglina7 小时前
三个晚上,我和 WorkBuddy 做了个生图网站
前端·后端·ai编程
要开心吖ZSH8 小时前
一次线上锁风暴复盘:号源表大范围 DELETE 的隐患与分批删除改造
数据库·mysql·行锁·1024程序员节·间隙锁·lockwaittimeout
金銀銅鐵8 小时前
[Java] 用 CLI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
陈随易8 小时前
副业搞钱点子之收入查看器
前端·后端
Profile排查笔记8 小时前
浏览器指纹逆向怎么分析:从网络请求追踪到 JavaScript 采集链
前端·人工智能·后端·自动化