记一次麒麟 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连接失败。 - 原因分析 :
- 达梦默认端口为
5236,但现场实例实际监听的是15236(可通过ss -ntlpu | grep dmserver确认)。 - 密码中包含特殊字符(如
#或^)时,直接写在命令行中会被 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:交互式输入密码(推荐)
Bashdisql YYJX_YGJ_PROD@127.0.0.1:15236 # 输入口令:Dameng#123 -
方式 B:命令行转义密码
Bashdisql "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;
四、 达梦数据库核心概念认知避坑
-
关于
USE database;: 达梦数据库没有USE概念 。在达梦中,用户登录后默认自动绑定并进入同名的模式(Schema) 。用YYJX_YGJ_PROD登录,创建的所有表都会自动归属于该模式下。如需切换模式,请使用:SQLSET SCHEMA SCHEMA_NAME; -
查看当前模式/用户 :
SQLSELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL; -
退出终端 : 使用
exit或quit退出,不支持 PostgreSQL/MySQL 风格的\q。
五、 总结
国产数据库在兼容性上已经做得相当出色(如配置了"大小写不敏感"和"兼容 MySQL")。在运维和部署过程中,厘清 Linux 用户环境变量 、处理好特殊字符转义 以及理解模式(Schema)概念是保障项目顺利上云/国产化替换的关键。