mysql udf函数错误中断,关于MySQL出现Can't open shared library 'udf.dll'错误提示的研究...

关于MySQL出现Can't open shared library 'udf.dll'错误提示的研究

2011-7-2 王健宇 转载

UDF - User Defined Function 用户自定义函数 。

mysql中支持UDF扩展 ,使得我们可以调用DLL里面的函数来实现一些特殊的功能。

但是对于UDF的具体限制,MYSQL的各个版本各有不同。 下面记录一下:

听说(只是听说,没做测试),在MYSQL 4.1以前的版本中,可以将所有的DLL文件里面的任何函数都注册到MYSQL里面以供MYSQL调用。

无论这个DLL在什么位置,函数的声明是什么样的。

在MYSQL 4.1及以后的版本中,对UDF函数进行了限制,只有实现了一个特定接口的函数才可以被成功注册到MYSQL中,

这样就防止了通过MYSQL非法调用系统的DLL。

在MYSQL5以后,对注册的DLL的位置有了限制,创建函数的时候,所对应的DLL不能包含/或者\,简单的理解就是不能是绝对路径。

所以我们将DLL释放到system32目录,来跳过这个限制。。或者放到盘符的根目录下通过c:udf.dll这种形式的写法来跳过限制。

再说MYSQL5.1,这里有个问题相信大家会经常遇到的。。

大家有的时候在创建函数的时候,常常会遇到

Can't open shared library 'udf.dll' (errno: 2)

这个错误。可是我们的语句没有写错,DLL也是免杀的或者服务器上根本没装杀软。。

好多人这里就不明白了。。

这是因为MYSQL 5.1及以后的版本中,又多了一个限制。

创建函数时所用的DLL只能放在mysql的plugin目录里面。。而且这个plugin目录默认是不存在的。。挺YD吧,,可能就是为了防止通过into dumpfile将DLL来写到这个文件夹。。

MYSQL是无法创建目录的哦, 如果into dumpfile的目标目录不存在是会报错的。

需要手动创建 ,但是它却是一个系统变量。

我在虚拟机上装了MYSQL 5.1.3进行了测试,安装目录是:

C:\Program Files\MySQL\MySQL Server 5.1

通过:

show variables like '%plugin%';

可以看到:

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

| Variable_name | Value

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

| plugin_dir | C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin

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

plugin目录位置是mysql安装目录下的lib/plugin ,需要我们手动创建 。

然后将udf.dll传到这个位置,再创建函数 ,这时就会成功了。

但是这个变量的值是只读的,尝试用

set @@plugin_dir = 'd:\\';

去更改它的值会发生错误。

只能通过修改php.ini ,在里面添加一个

plugin_dir=d:/

才可以修改这个值 。。

无奈。。

所以在导出UDF提权之前 ,先确定一下MYSQL的版本是有必要的。

如果是5.1以后的,那就不行了,如果是5.1以前的版本创建函数的时候还报Can't open shared library这个错误。

那就要看看DLL是不是真的被导出了,还是被杀软隔离或者干掉了。

我自己测试了一下,在mysql的目录中新建个lib\plugin目录以后把udf.dll放进去以后执行Create Function cmdshell returns string soname 'udf.dll';就能成功了。

评论:

2c93f4d0969ee1365813706a76a9650d?s=40&d=mm&r=g

2011-07-08 13:56

路过,学习了, 貌似很给力   啊

74bf55d3792f7444eaab020502910911?s=40&d=mm&r=g

2011-07-04 21:58

还没遇过这样的错误呢。

f5b59eb9eb1c3e93e13d4a055ee92be9?s=40&d=mm&r=g

2011-07-02 17:31

博客主题有个性.

9b6246a48524d9a11f7615d0bfaf1f46?s=40&d=mm&r=g

2011-07-02 18:21

@许忠成博客:嘿嘿

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值