MySQL专栏解决odbc连接mys

湖南白癜风医院 http://baidianfeng.39.net/a_yqyy/140104/4322074.html

最近测试odbc连接mysql数据库,结果遇到一个奇葩的错误,提示:[][unixODBC][DriverManager]Cantopenlib/soft/mysqlodbc8/lib/libmyodbc8a.so:filenotfound。下面来介绍一下排查和解决该问题的具体思路。#MySQL专栏#

已经成功安装mysqlconnector/ODBC(安装参考「MySQL专栏」MySQLConnector/ODBC下载及安装的具体方法)和unixODBC(安装参考「DM专栏」unixODBC下载及编译安装的最佳实践),在ODBC连接测试mysql数据库时报错“Cantopenlib/soft/mysqlodbc8/lib/libmyodbc8a.so:filenotfound”。但是实际核实该文件是存在的,经过不断排错,最终解决,参考方案如下。

核实该文件是否存在,权限是否正确

ls-ls/soft/mysqlodbc8/lib/libmyodbc8a.so,来核验报错的文件是否存在,同时核实文件的权限及属主属组是否正确,通过archive版本安装的可能会存在这一问题。个人环境的确存在这个问题,通过chownroot:root/soft/mysqlodbc8-R和chmod/soft/mysqlodbc8-R后,结果还是报该错误,说明还有其他原因。

核实unixODBC配置文件

ODBC的配置文件主要包括odbcinst.ini和odbc.ini,主要是核实驱动的路径,以及驱动引用是否正确,包括配置文件的格式,有无空格等问题,按小编前面链接文章中配置的并无问题。

核实驱动文件动态链接库

既然报错提示“Cantopenlib/soft/mysqlodbc8/lib/libmyodbc8a.so:filenotfound”,索性来看看libmyodbc8a.so的驱动文件的动态链接库是否正确。我们通过ldd/soft/mysqlodbc8/lib/libmyodbc8a.so查看,果然启动有一个驱动显示notfound。

[root

localhost~]#isql-vmysqldb_mysqldb_mysql

[][unixODBC][DriverManager]Cantopenlib/soft/mysqlodbc8/lib/libmyodbc8a.so:filenotfound

[ISQL]ERROR:CouldnotSQLConnect

[root

localhost~]#ldd/soft/mysqlodbc8/lib/libmyodbc8a.so

  linux-vdso.so.1(0xffcd)

  libodbcinst.so.2=notfound

  libpthread.so.0=/usr/lib64/libpthread.so.0(0xf86a1ee)

  librt.so.1=/usr/lib64/librt.so.1(0xf86a1cde)

  libcrypto.so.1.1=/soft/mysqlodbc8/lib/private/libcrypto.so.1.1(0xf86ac)

  libssl.so.1.1=/soft/mysqlodbc8/lib/private/libssl.so.1.1(0xf86ac)

  libdl.so.2=/usr/lib64/libdl.so.2(0xf86a1398)

  libresolv.so.2=/usr/lib64/libresolv.so.2(0xf86a1181)

  libm.so.6=/usr/lib64/libm.so.6(0xf86a0dff)

  libstdc++.so.6=/usr/lib64/libstdc++.so.6(0xf86a0a6a)

  libgcc_s.so.1=/usr/lib64/libgcc_s.so.1(0xf86a0852)

  libc.so.6=/usr/lib64/libc.so.6(0xf86ae)

  /lib64/ld-linux-x86-64.so.2(0xf86a2a9d)

查找notfound的libodbcinst.so.2驱动,find/-namelibodbcinst.so.2,的确不存在,但是libodbcinst.so的驱动是存在的,位置在odbc安装路径中。

[root

localhost~]#find/-namelibodbcinst.so.2

[root

localhost~]#find/-namelibodbcinst.so

/soft/dmsetup/unixODBC-2.3.0/odbcinst/.libs/libodbcinst.so

/soft/odbc/lib/libodbcinst.so

在确认/soft/odbc/lib在动态链接库的环境变量中后,我们通过ln-s命令创建一个软链接。命令为:ln-s/soft/odbc/lib/libodbcinst.so/soft/odbc/lib/libodbcinst.so.2

创建后重新ldd查看驱动,无notfound的项。

[root

localhost~]#ldd/soft/mysqlodbc8/lib/libmyodbc8a.so

  linux-vdso.so.1(0xfff3c5b3)

  libodbcinst.so.2=/soft/odbc/lib/libodbcinst.so.2(0xfadeb)

  libpthread.so.0=/usr/lib64/libpthread.so.0(0xfabcb)

  librt.so.1=/usr/lib64/librt.so.1(0xfa9c2)

  libcrypto.so.1.1=/soft/mysqlodbc8/lib/private/libcrypto.so.1.1(0xfa510)

  libssl.so.1.1=/soft/mysqlodbc8/lib/private/libssl.so.1.1(0xfa280)

  libdl.so.2=/usr/lib64/libdl.so.2(0xfa07c)

  libresolv.so.2=/usr/lib64/libresolv.so.2(0xf9e65)

  libm.so.6=/usr/lib64/libm.so.6(0xf9ae3)

  libstdc++.so.6=/usr/lib64/libstdc++.so.6(0xf974e)

  libgcc_s.so.1=/usr/lib64/libgcc_s.so.1(0xf9536)

  libc.so.6=/usr/lib64/libc.so.6(0xf9172)

  /lib64/ld-linux-x86-64.so.2(0xfb99a)

再次测试登录,成功。

[root

localhost~]#isql-vmysqldb_mysqldb_mysql

+---------------------------------------+

Connected!

sql-statement

help[tablename]

quit

+---------------------------------------+

以上就是个人关于odbc链接mysql数据库报错“[][unixODBC][DriverManager]Cantopenlib/soft/mysqlodbc8/lib/libmyodbc8a.so:filenotfound”的解决思路和方案。




转载请注明:http://www.xcqg58.com/jyqj/jyqj/26847498.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了