计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

Linux下配置数据源

更新时间:2023-10-23 GMT+08:00

GaussDB提供的ODBC DRIVER(psqlodbcw.so)配置到数据源中便可使用。配置数据源需要配置“odbc.ini”和“odbcinst.ini”两个文件(在编译安装unixODBC过程中生成且默认放在“/usr/local/etc”目录下),并在服务器端进行配置。

操作步骤

  1. 获取unixODBC源码包。

    获取参考地址:https://sourceforge.net/projects/unixodbc/files/unixODBC

    下载后请先按照社区提供的完整性校验算法进行完整性校验。

  2. 安装unixODBC。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。

    目前不支持unixODBC-2.2.1版本。以unixODBC-2.3.0版本为例,在客户端执行如下命令安装unixODBC。默认安装到“/usr/local”目录下,生成数据源文件到 “/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。
    tar zxvf unixODBC-2.3.0.tar.gz
    cd unixODBC-2.3.0
    #修改configure文件(如果不存在,那么请修改configure.ac),找到LIB_VERSION
    #将它的值修改为"1:0:0",这样将编译出*.so.1的动态库,与psqlodbcw.so的依赖关系相同。
    vim configure
    
    ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu 
    make
    #安装可能需要root权限
    make install

  3. 替换客户端GaussDB驱动程序。

    GaussDB-Kernel_VxxxRxxxCxx.x-xxxxx-64bit-Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都拷贝到“/usr/local/lib”目录下。

  4. 配置数据源。

    1. 配置ODBC驱动文件。

      在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。

      [GaussMPP]
      Driver64=/usr/local/lib/psqlodbcw.so
      setup=/usr/local/lib/psqlodbcw.so

      odbcinst.ini文件中的配置参数说明如表1所示。

      表1 odbcinst.ini文件配置参数

      参数

      描述

      示例

      [DriverName]

      驱动器名称,对应数据源DSN中的驱动名。

      [DRIVER_N]

      Driver64

      驱动动态库的路径。

      Driver64=/usr/local/lib/psqlodbcw.so

      setup

      驱动安装路径,与Driver64中动态库的路径一致。

      setup=/usr/local/lib/psqlodbcw.so

    2. 配置数据源文件。

      在“/usr/local/etc/odbc.ini”文件中追加以下内容。

      [MPPODBC]
      Driver=GaussMPP
      Servername=10.145.130.26(数据库Server IP)
      Database=postgres  (数据库名)
      Username=omm  (数据库用户名)
      Password=  (数据库用户密码)
      Port=8000 (数据库侦听端口)
      Sslmode=allow

      odbc.ini文件配置参数说明如表2所示。

      表2 odbc.ini文件配置参数

      参数

      描述

      示例

      [DSN]

      数据源的名称。

      [MPPODBC]

      Driver

      驱动名,对应odbcinst.ini中的DriverName。

      Driver=DRIVER_N

      Servername

      服务器的IP地址。可配置多个IP地址。

      Servername=10.145.130.26

      Database

      要连接的数据库的名称。

      Database=postgres

      Username

      数据库用户名称。

      Username=omm

      Password

      数据库用户密码。

      Password=

      说明:

      ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。

      但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。

      推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。

      Port

      服务器的端口号。

      Port=8000

      Sslmode

      开启SSL模式

      Sslmode=allow

      Debug

      设置为1时,将会打印psqlodbc驱动的mylog,日志生成目录为/tmp/。设置为0时则不会生成。

      Debug=1

      UseServerSidePrepare

      是否开启数据库端扩展查询协议。

      可选值0或1,默认为1,表示打开扩展查询协议。

      UseServerSidePrepare=1

      UseBatchProtocol

      是否开启批量查询协议(打开可提高DML性能);可选值0或者1,默认为1。

      当此值为0时,不使用批量查询协议(主要用于与早期数据库版本通信兼容)。

      当此值为1,并且数据库support_batch_bind参数存在且为on时,将打开批量查询协议。

      UseBatchProtocol=1

      ForExtensionConnector

      这个开关控制着savepoint是否发送,savepoint相关问题可以注意这个开关。

      ForExtensionConnector=1

      UnamedPrepStmtThreshold

      每次调用SQLFreeHandle释放Stmt时,ODBC都会向server端发送一个Deallocate plan_name语句,业务中存在大量这类语句。为了减少这类语句的发送,我们将 stmt->plan_name置空,从而使得数据库识别这个为unamed stmt。增加这个参数对unamed stmt的阈值进行控制。

      UnamedPrepStmtThreshold=100

      ConnectionExtraInfo

      GUC参数connection_info(参见connection_info)中显示驱动部署路径和进程属主用户的开关。

      ConnectionExtraInfo=1

      说明:

      默认值为0。当设置为1时,ODBC驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在connection_info参数(参见connection_info)里;同时可以在PG_STAT_ACTIVITY中查询到。

      BoolAsChar

      设置为Yes是,Bools值将会映射为SQL_CHAR。如不设置将会映射为SQL_BIT。

      BoolsAsChar = Yes

      RowVersioning

      当尝试更新一行数据时,设置为Yes会允许应用检测数据有没有被其他用户进行修改。

      RowVersioning=Yes

      ShowSystemTables

      驱动将会默认系统表格为普通SQL表格。

      ShowSystemTables=Yes

      其中关于Sslmode的选项的允许值,具体信息见下表:

      表3 Sslmode的可选项及其描述

      Sslmode

      是否会启用SSL加密

      描述

      disable

      不使用SSL安全连接。

      allow

      可能

      如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。

      prefer

      可能

      如果数据库支持,那么建议使用SSL安全加密连接,但不验证数据库服务器的真实性。

      require

      必须使用SSL安全连接,但是只做了数据加密,而并不验证数据库服务器的真实性。

      verify-ca

      必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。

      verify-full

      必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。GaussDB不支持此模式。

  5. 在客户端配置环境变量。

    vim ~/.bashrc

    在配置文件中追加以下内容。

    export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
    export ODBCSYSINI=/usr/local/etc
    export ODBCINI=/usr/local/etc/odbc.ini

  6. 执行如下命令使设置生效。

    source ~/.bashrc

测试数据源配置

执行./isql -v MPPODBC(数据源名称)命令。

  • 如果显示如下信息,表明配置正确,连接成功。
    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL> 
  • 若显示ERROR信息,则表明配置错误。请检查上述配置是否正确。

常见问题处理

  • [UnixODBC]connect to server failed: no such file or directory

    此问题可能的原因:

    • 配置了错误的/不可达的数据库地址,或者端口

      请检查数据源配置中的Servername及Port配置项。

    • 服务器侦听不正确

      如果确认Servername及Port配置正确,请根据“操作步骤”中数据库服务器的相关配置,确保数据库侦听了合适的网卡及端口。

    • 防火墙及网闸设备

      请确认防火墙设置,将数据库的通信端口添加到可信端口中。

      如果有网闸设备,请确认一下相关的设置。

  • [unixODBC]The password-stored method is not supported.

    此问题可能原因:

    数据源中未配置sslmode配置项。

    解决办法:

    请配置该选项至allow或以上选项。此配置的更多信息,见表3

  • Server common name "xxxx" does not match host name "xxxxx"

    此问题的原因:

    使用了SSL加密的“verify-full”选项,驱动程序会验证证书中的主机名与实际部署数据库的主机名是否一致。

    解决办法:

    碰到此问题可以使用“verify-ca”选项,不再校验主机名;或者重新生成一套与数据库所在主机名相同的CA证书。

  • Driver's SQLAllocHandle on SQL_HANDLE_DBC failed

    此问题的可能原因:

    可执行文件(比如UnixODBC的isql,以下都以isql为例)与数据库驱动(psqlodbcw.so)依赖于不同的odbc的库版本:libodbc.so.1或者libodbc.so.2。此问题可以通过如下方式确认:

    ldd `which isql` | grep odbc
    ldd psqlodbcw.so | grep odbc

    这时,如果输出的libodbc.so最后的后缀数字不同或者指向不同的磁盘物理文件,那么基本就可以断定是此问题。isql与psqlodbcw.so都会要求加载libodbc.so,这时如果它们加载的是不同的物理文件,便会导致两套完全同名的函数列表,同时出现在同一个可见域里(UnixODBC的libodbc.so.*的函数导出列表完全一致),产生冲突,无法加载数据库驱动。

    解决办法:

    确定一个要使用的UnixODBC,然后卸载另外一个(比如卸载库版本号为.so.2的UnixODBC),然后将剩下的.so.1的库,新建一个同名但是后缀为.so.2的软链接,便可解决此问题。

  • [unixODBC][Driver Manager]Invalid attribute value

    有可能是unixODBC的版本并非推荐版本,建议通过“odbcinst --version”命令排查环境中的unixODBC版本。

  • authentication method 10 not supported.

    使用开源客户端碰到此问题,可能原因:

    数据库中存储的口令校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。

    说明:
    • 数据库并不存储用户口令,只存储用户口令的哈希码。
    • 数据库当用户更新用户口令或者新建用户时,会同时存储两种格式的哈希码,这时将兼容开源的认证协议。
    • 但是当老版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户口令,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做口令认证。
    • MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。

    要解决该问题,可以更新用户口令(参见ALTER USER);或者新建一个用户(参见CREATE USER),赋于同等权限,使用新用户连接数据库。

  • unsupported frontend protocol 3.51: server supports 1.0 to 3.0

    目标数据库版本过低,或者目标数据库为开源数据库。请使用对应版本的数据库驱动连接目标数据库。

  • isql: error while loading shared libraries: xxx

    环境缺少该动态库,需要自行安装对应的库。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容