暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

DM8 → MySQL 8.4 DBLINK 配置及验证

胖头鱼 1天前
10

本文为 Centos7 DM8 → MySQL 8.4 DBLINK 配置及验证,其中数据库部署前检查和单机安装已略过,详情请参考历史文章和 DM 官网:
https://eco.dameng.com/document/dm/zh-cn/ops/DW-installation-cluster.html
安装包下载:https://eco.dameng.com/download/
达梦社区地址: https://eco.dameng.com


1. 环境准备

DM8 单机 + MySQL 8.4 单机,数据库安装过程不再介绍,DM8 单机安装可参考历史文章及达梦官网。

注意:DM 与 MySQL 的大小写敏感机制存在差异,配置 DBLINK 时需要重点关注用户名及表名大小写。

2. DM8 安装 unixODBC

yum -y install unixODBC unixODBC-devel odbcinst -j isql --version

本环境验证结果:

unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 isql --version unixODBC 2.3.1

3. 下载 MySQL Connector/ODBC

下载地址:

https://downloads.mysql.com/archives/c-odbc/

注意:MySQL Connector/ODBC 的 Linux 二进制包需要与操作系统 glibc 版本匹配。

本环境:

CentOS 7.9 glibc 2.17 x86_64

实际使用:

mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit.tar.gz

4. 上传并解压 MySQL Connector/ODBC

cd /opt tar -xzf /root/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit.tar.gz

安装目录:

/opt/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit

主要驱动文件:

/opt/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit/lib/libmyodbc8w.so

检查驱动依赖:

ldd /opt/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit/lib/libmyodbc8w.so | grep "not found"

无输出表示没有发现缺失的动态库。


5. 将 MySQL ODBC 驱动注册到 unixODBC

配置 /etc/odbcinst.ini

cat >/etc/odbcinst.ini <<'EOF' [MySQL ODBC 8.0 Unicode Driver] Description=MySQL Connector/ODBC 8.0.29 Unicode Driver Driver=/opt/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit/lib/libmyodbc8w.so Setup= UsageCount=1 EOF

验证:

odbcinst -j odbcinst -q -d

应看到:

[MySQL ODBC 8.0 Unicode Driver]

6. 配置 /etc/odbc.ini

根据实际 MySQL 环境修改:

cat >/etc/odbc.ini <<'EOF' [mysql8] Driver=MySQL ODBC 8.0 Unicode Driver SERVER=192.168.88.88 PORT=3306 DATABASE=USER CHARSET=utf8mb4 EOF

检查:

cat /etc/odbc.ini

本环境 DSN:

mysql8

7. 使用 isql 测试 MySQL ODBC 连接

使用 MySQL 用户测试:

isql -v mysql8 USER 'PASSWORD'

正常应返回:

+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | +---------------------------------------+ SQL>

注意:密码替换成实际 MySQL 用户密码。


8. 使用 dmdba 用户测试 ODBC

DM Server 最终使用 dmdba 用户运行,因此必须进一步验证 dmdba 用户是否能够正常连接:

su - dmdba -c "isql -v mysql8 USER 'PASSWORD'"

本环境已经验证:

+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | +---------------------------------------+ SQL>

说明:

dmdba ↓ unixODBC ↓ mysql8 ↓ MySQL Connector/ODBC ↓ MySQL 8.4

连接正常。


9. 检查 DM8 systemd 服务环境

检查 DM 服务环境:

systemctl show DmServiceDMSERVER.service -p Environment systemctl cat DmServiceDMSERVER.service | grep -E 'Environment|ExecStart'

进一步确认实际 DM Server 进程:

pid=$(pgrep -f '/home/dmdba/dmdbms/bin/dmserver' | head -1) echo "PID=$pid" tr '\0' '\n' < /proc/$pid/environ | grep -E '^(LD_LIBRARY_PATH|ODBC|HOME)='

本环境实际:

LD_LIBRARY_PATH=/home/dmdba/dmdbms/bin: HOME=/home/dmdba

由于使用与 DM Server 类似的环境执行 isql 已经能够:

+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | +---------------------------------------+ SQL>

因此本环境暂时**不需要额外修改 systemd 的 **LD_LIBRARY_PATH


10. 创建 DM8 → MySQL DBLINK

本环境最终使用:

CREATE OR REPLACE LINK DBLINK_DM_MYSQL CONNECT 'ODBC' WITH "USER" IDENTIFIED BY "PASSWORD" USING 'mysql8';

其中:

DBLINK_DM_MYSQL DBLINK名称 ODBC 使用ODBC连接 USER MySQL用户名 PASSWORD MySQL密码 mysql8 /etc/odbc.ini中的DSN

注意:当前 DM8 版本实际测试中,不能使用:

会报:

因此当前环境直接使用 USING 'mysql8'

OPTION (DB_TYPE=MYSQL)
-2297: DBLINK选项[DB_TYPE]解析失败

11. 注意 DM DBLINK 用户名大小写

DM DBLINK 实际连接 MySQL 时,如果日志出现:

Access denied for user 'USER'@'192.168.88.97'

说明 DM 实际发送给 MySQL 的用户名是大写而不是小写。

这种情况下,需要根据 DM 日志确认实际用户名。

例如 MySQL 端创建对应用户:

CREATE USER 'USER'@'192.168.88.97' IDENTIFIED WITH caching_sha2_password BY 'PASSWORD'; GRANT ALL PRIVILEGES ON USER.* TO 'USER'@'192.168.88.97'; SHOW GRANTS FOR 'USER'@'192.168.88.97';

本环境实际验证时,DM 日志出现了 USER@192.168.88.97,增加对应 MySQL 用户后,认证问题解决。


12. 创建简单测试表

在 MySQL 创建测试表。

考虑到 DM DBLINK 访问远程对象时存在对象名大写转换问题,本环境建议直接使用大写表名

USE USER; DROP TABLE IF EXISTS DBLINK_TEST_TABLE; CREATE TABLE DBLINK_TEST_TABLE ( ID INT NOT NULL, NAME VARCHAR(50), AGE INT, SALARY DECIMAL(10,2), PRIMARY KEY (ID) ); INSERT INTO DBLINK_TEST_TABLE (ID, NAME, AGE, SALARY) VALUES (1, '张三', 25, 8000.00), (2, '李四', 30, 12000.50), (3, '王五', 28, 9500.00); COMMIT; SELECT * FROM DBLINK_TEST_TABLE;

13. DM8 测试 DBLINK

回到 DM8:

SELECT * FROM DBLINK_TEST_TABLE@DBLINK_DM_MYSQL;

如果正常,应返回:

ID NAME AGE SALARY 1 张三 25 8000.00 2 李四 30 12000.50 3 王五 28 9500.00

最后修改时间:2026-09-12 00:03:39
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论