达梦数据库端口监听需用netstat或ss确认,默认5236,若无输出则服务未启动或端口被修改;还需检查防火墙、SELinux、云安全组、pdo_dameng扩展加载及连接字符串格式,并通过SQLCODE定位具体错误。

达梦数据库端口是否监听?用 netstat 或 ss 确认
PHP 连不上达梦,第一反应不是改代码,而是确认达梦服务真正在监听目标端口。默认端口是 5236,但可能被修改过。
- 登录达梦服务器后执行:
netstat -tuln | grep 5236(Linux)或ss -tuln | grep 5236 - 若无输出,说明达梦没启动,或配置了其他端口;检查
dm.ini中的PORT_NUM值 - 注意:达梦服务进程名通常是
DmServiceXXX,可用ps -ef | grep DmService确认是否运行
防火墙和 SELinux 是否拦住了连接?
即使端口监听了,也可能被系统级策略拦截:
- Linux 防火墙:
systemctl status firewalld查状态,若启用需放行端口:firewall-cmd --permanent --add-port=5236/tcp,再重载 - SELinux:
getenforce查模式,若为Enforcing,临时设为 permissive 测试:setenforce 0;长期方案需添加端口上下文:semanage port -a -t dm_port_t -p tcp 5236 -
云服务器(如阿里云、腾讯云)还要检查安全组规则,确保入方向开放
5236TCP 端口
PHP 的 pdo_dameng 扩展是否装对了?
达梦官方不提供标准 PDO 驱动,主流方式是使用达梦自带的 pdo_dameng 扩展(基于 DM8 客户端库):
- 检查扩展是否加载:
php -m | grep dameng,或phpinfo()页面搜pdo_dameng - 确保
libdmdpi.so(Linux)或dmdpi.dll(Windows)路径已加入LD_LIBRARY_PATH(Linux)或PATH(Windows) - 连接字符串格式必须为:
dameng:server=192.168.1.100;port=5236;database=MYDB;uid=SYSDBA;pwd=SYSDBA—— 注意不是mysql:或oci:风格
从 PHP 机器 telnet 能通,但 pdo_connect 失败?重点看错误码
telnet host 5236 成功只说明网络层通,不代表达梦协议层可交互:
立即学习“PHP免费学习笔记(深入)”;
- 开启 PHP 错误报告:
ini_set('display_errors', 1); error_reporting(E_ALL); - 捕获具体异常:
try { $pdo = new PDO($dsn, $user, $pass); } catch (PDOException $e) { echo $e->getMessage(); } - 常见报错:
SQLCODE: -2601→ 用户名/密码错误或账户被锁SQLCODE: -2701→ 数据库名不存在或未挂载SQLCODE: -2614→ 协议版本不匹配(PHP 扩展与达梦服务端版本不兼容,比如用 DM7 扩展连 DM8)
达梦的协议握手细节多,版本错配、字符集不一致、甚至客户端 IP 被 dm_svc.conf 限制,都可能导致“端口通但连不上”。先盯住 SQLCODE,它比“Connection refused”有用得多。











