Linux下配置数据源

    1. 获取unixODBC源码包。获取参考地址: 下载后请先按照社区提供的完整性校验算法进行完整性校验。

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

      目前不支持unixODBC-2.2.1版本。以unixODBC-2.3.0版本为例,在客户端执行如下命令安装unixODBC。默认安装到“/usr/local”目录下,生成数据源文件到 “/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。

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

      a.将openGauss-x.x.x-ODBC.tar.gz解压到“/usr/local/lib”目录下。解压会得到“psqlodbcw.la”和“psqlodbcw.so”两个文件。

      b.将openGauss-x.x.x-ODBC.tar.gz解压后lib目录中的库拷贝到“/usr/local/lib”目录下。

    4. 配置数据源。

      a. 配置ODBC驱动文件。

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

      1. Driver64=/usr/local/lib/psqlodbcw.so
      2. setup=/usr/local/lib/psqlodbcw.so

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

      表 1 odbcinst.ini文件配置参数

      b.配置数据源文件。

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

      1. [MPPODBC]
      2. Driver=GaussMPP
      3. Servername=10.10.0.13(数据库Server IP
      4. Database=postgres (数据库名)
      5. Username=omm (数据库用户名)
      6. Password= (数据库用户密码)
      7. Sslmode=allow

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

      表 2 odbc.ini文件配置参数

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

      表 3 sslmode的可选项及其描述

    5. 生成SSL证书,具体请参见证书生成

    6. 替换SSL证书,具体请参见。

    7. 配置数据库服务器。

      a. 以操作系统用户omm登录数据库主节点。

      b. 执行如下命令增加对外提供服务的网卡IP或者主机名(英文逗号分隔),其中NodeName为当前节点名称:

      1. gs_guc reload -N NodeName -I all -c "listen_addresses='localhost,192.168.0.100,10.11.12.13'"

      在DR(Direct Routing,LVS的直接路由DR模式)模式中需要将虚拟IP地址(10.11.12.13)加入到服务器的侦听地址列表中。

      listen_addresses也可以配置为“*”或“0.0.0.0”,此配置下将侦听所有网卡,但存在安全风险,不推荐用户使用,推荐用户按照需要配置IP或者主机名,打开侦听。

      c. 执行如下命令在数据库主节点配置文件中增加一条认证规则。(这里假设客户端IP地址为10.11.12.13,即远程连接的机器的IP地址)

      如果将ODBC客户端配置在和要连接的数据库主节点在同一台机器上,则可使用local trust认证方式,如下:

      1. local all all xxx.xxx.xxx.xxx/32 trust
      1. host all all xxx.xxx.xxx.xxx/32 sha256

      d.重启openGauss。

      1. gs_om -t stop
      2. gs_om -t start
    8. 配置环境变量。

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

      1. export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
      2. export ODBCSYSINI=/usr/local/etc
    9. 执行如下命令使设置生效。

      1. source ~/.bashrc

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

    • 如果显示如下信息,表明配置正确,连接成功。

      1. +---------------------------------------+
      2. | Connected! |
      3. | |
      4. | sql-statement |
      5. | help [tablename] |
      6. | |
      7. 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。此问题可以通过如下方式确认:

      这时,如果输出的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!

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

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

    • [unixODBC][Driver Manager]Invalid attribute value

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

    • authentication method 10 not supported.

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

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

      说明:

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

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

    • unsupported frontend protocol 3.51: server supports 1.0 to 3.0

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

    • FATAL: GSS authentication method is not allowed because XXXX user password is not disabled.