计算
弹性云服务器 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
更新时间:2022-08-16 GMT+08:00

Linux下配置数据源

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

操作步骤

  1. 获取unixODBC源码包。

    获取参考地址:http://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download

  2. 目前不支持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 #如果要在TaiShan服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu 
    make
    #安装可能需要root权限
    make install

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

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

    将dws_8.1.x_odbc_driver_for_xxx_xxx.zip解压

    • 在“/dws_8.1.x_odbc_driver_for_xxx_xxx/odbc/lib”目录下得到“psqlodbcw.la”和“psqlodbcw.so”两个文件。
    • 在“/dws_8.1.x_odbc_driver_for_xxx_xxx/lib”目录下得到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=/xxx/odbc/lib/psqlodbcw.so

      setup

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

      setup=/xxx/odbc/lib/psqlodbcw.so

    2. 配置数据源文件。

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

      [MPPODBC]
      Driver=GaussMPP
      Servername=10.10.0.13(数据库Server IP)
      Database=gaussdb  (数据库名)
      Username=dbadmin  (数据库用户名)
      Password=  (数据库用户密码)
      Port=8000 (数据库监听端口)
      Sslmode=allow

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

      表2 odbc.ini文件配置参数

      参数

      描述

      示例

      [DSN]

      数据源的名称。

      [MPPODBC]

      Driver

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

      Driver=DRIVER_N

      Servername

      服务器的IP地址。

      Servername=10.145.130.26

      Database

      要连接的数据库的名称。

      Database=gaussdb

      Username

      数据库用户名称。

      Username=dbadmin

      Password

      数据库用户密码。

      Password=

      说明:

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

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

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

      Port

      服务器的端口号。

      Port=8000

      Sslmode

      开启SSL模式

      Sslmode=allow

      UseServerSidePrepare

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

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

      UseServerSidePrepare=1

      UseBatchProtocol

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

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

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

      UseBatchProtocol=1

      ConnectionExtraInfo

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

      ConnectionExtraInfo=1

      说明:

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

      ForExtensionConnector

      ETL工具性能优化参数,可进行内存优化,降低对端的CN内存占用,避免因CN内存使用过多导致系统不稳定。

      可选值0或者1,默认为0,表示不开启优化项。

      请勿在数据库系统之外的其他业务中配置此参数,以免影响业务的正确性。

      ForExtensionConnector=1

      KeepDisallowPremature

      当UseDeclareFetch=1时,应用程序调用SQLPrepare后调用SQLNumResultCols、SQLDescribeCol或SQLColAttribute获取结果集列信息时,SQL语句中的游标是否具有with hold属性。

      可选值0或者1,0表示具有with hold属性,1表示不具有with hold属性,默认为0。

      KeepDisallowPremature=1

      说明:
      • UseServerSidePrepare=1时,KeepDisallowPremature参数不生效,使用时需要指定UseServerSidePrepare为0,例如:UseDeclareFetch=1

        KeepDisallowPremature=1

        UseServerSidePrepare=0

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

      表3 sslmode的可选项及其描述

      sslmode

      是否会启用SSL加密

      描述

      disable

      不使用SSL安全连接。

      allow

      可能

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

      prefer

      可能

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

      require

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

      verify-ca

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

      verify-full

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

  5. SSL模式

    如果需要使用SSL证书连接,那么请将GaussDB(DWS)安装包中的SSLCERT的证书包解压,在shell环境下,执行“source sslcert_env.sh”,即在当前会话完成证书的默认位置的部署。

    或者手动声明如下环境变量,同时保证client.key*系列文件为600权限:

    export PGSSLCERT="/YOUR/PATH/OF/client.crt" #请修改该路径到client.crt的绝对路径
    export PGSSLKEY="/YOUR/PATH/OF/client.key"  #请修改该路径到client.key的绝对路径

    同时将数据源中的Sslmode选项调整至“verify-ca”。

  6. 将客户端所在主机的IP网段加入GaussDB(DWS)的安全组规则,确保客户端主机与GaussDB(DWS)网络互通。
  7. 配置环境变量。

    vim ~/.bashrc

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

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

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

    source ~/.bashrc

测试数据源配置

执行isql -v GaussODBC(数据源名称)命令。

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

常见问题处理

  • [UnixODBC][Driver Manager]Can't open lib 'xxx/xxx/psqlodbcw.so' : file not found.

    此问题的可能原因:

    • odbcinst.ini文件中配置的路径不正确

      确认的方法:'ls'一下错误信息中的路径,以确保该psqlodbcw.so文件存在,同时具有执行权限。

    • psqlodbcw.so的依赖库不存在,或者不在系统环境变量中

      确认的办法:ldd一下错误信息中的路径,如果是缺少libodbc.so.1等UnixODBC的库,那么按照“操作步骤”中的方法重新配置UnixODBC,并确保它的安装路径下的lib目录添加到了LD_LIBRARY_PATH中;如果是缺少其他库,请将ODBC驱动包中的lib目录添加到LD_LIBRARY_PATH中。

  • [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的软链接,便可解决此问题。

  • FATAL: Forbid remote connection with trust method!

    由于安全原因,数据库CN禁止集群内部其他节点无认证接入。

    如果要在集群内部访问CN,请将ODBC程序部署在CN所在机器,服务器地址使用"127.0.0.1"。建议业务系统单独部署在集群外部,否则可能会影响数据库运行性能。

  • [unixODBC][Driver Manager]Invalid attribute value

    在使用SQL on other GaussDB功能时碰到此问题,有可能是unixODBC的版本并非推荐版本,建议通过“odbcinst --version”命令排查环境中的unixODBC版本。

  • authentication method 10 not supported.

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

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

    • 数据库并不存储用户口令,只存储用户口令的哈希码。
    • 早期版本(V100R002C80SPC300之前的版本)的数据库只存储了SHA256格式的哈希,并未存储MD5的哈希,所以无法使用MD5做用户口令校验。
    • 新版本(V100R002C80SPC300及之后版本)的数据库当用户更新用户口令或者新建用户时,会同时存储两种格式的哈希码,这时将兼容开源的认证协议。
    • 但是当老版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户口令,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做口令认证。

    要解决该问题,可以更新用户口令(参见《SQL语法参考》中“ALTER USER”章节);或者新建一个用户(参见《SQL语法参考》中“CREATE USER”章节),赋于同等权限,使用新用户连接数据库。

  • unsupported frontend protocol 3.51: server supports 1.0 to 3.0

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

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