[ERROR] Can’t open shared library ‘udf.dll’ (errno: 0 )
有3个多月没写博客了,现在似乎越来越懒了:( 今天竟然忘记了登录密码,幸好,输入几次终于想起来了……
如标题,[ERROR] Can’t open shared library ‘udf.dll’ (errno: 0 )
这是MySQL在启动时报的一个错误,在一个朋友的服务器上看到的,这个错误几乎已经持续了很久很久了,虽然报错,但似乎不影响使用,只不过,对于一个很洁癖的人来说,每次看到都很闹心。
之前曾经尝试过查找原因,包括建立plugin目录,以及遍历整个系统来查找udf.dll,都没什么结果。
也在谷歌和度娘上找过,说是什么提权文件,实话说,用了这么多年还真从来没听过这个功能……也按搜索到的文章操作过,但全部都是失败。
最后,考虑到可以尝试升级一下MySQL的版本(之前是5.0很早期的一个版本),由于系统还有很多不太熟悉的程序,所以为了考虑稳定性,所以只是升级到MySQL5.0的最后一个版本。
升级很简单,轻车熟路,一贯是我最懒人的做法:
1.由于想重新使用mysql的配置向导来配置my.ini所以,先将mysql的服务删除掉,命令行执行,mysqld-nt –remove即可。
2.不改变mysql的安装目录,因此,只需要将原来的安装目录改个名就行(权当备份了)
3.执行mysql安装程序,安装到之前的目录下。
4.执行mysql的配置向导,进行my.ini的配置。
5.手动打开my.ini,修改数据库文件储存目录变量“datadir”,修改为之前的数据库储存位置
6.重启mysql
升级操作就算完毕了,原来的帐号都可以继续使用,其他无须做什么改变。
回头再来看系统日志,发现一个很奇怪的现象,就是刚升级完启动mysql的时候那个错误是没有的,但改完数据库储存目录后再重启那个错误又出现了。
看来,这个错误本身应该还是来自于mysql数据库,而且只能是mysql自身的数据库(数据库名:mysql),
于是,关闭mysql。
尝试将旧的mysql系统数据库(数据库名为mysql),改成其他名字,将新的mysql默认的系统数据库copy过来。
同时将旧系统数据库内的user表文件(三个)都覆盖到新系统数据库内。
这时候再启动mysql就不会有错误提示了。
查看了一下旧系统数据库表,发现其中一个数据表(mysql\func)里存在一条记录:
mysql> select * from func; +-------+-----+---------+----------+ | name | ret | dl | type | +-------+-----+---------+----------+ | baker | 0 | udf.dll | function | +-------+-----+---------+----------+ 1 row in set (0.00 sec)
挺有意思的,真的不知道这是干什么用的,似乎没有它也一样正常运行。
结论:如果有类似这样错误的,可以尝试找一下系统数据库(mysql)的func表,把dl=udf.dll的这条记录删除掉,然后再重启mysql应该就可以了,如果怕出问题可以提前进行一下备份。
PS:网上其他的解决方案真的不知道是否可行,反正我是没成功。我的这个方案只是清除掉错误(功能),可能未必是一个完美的解决方案。但就个人而言,utf.dll似乎真的没什么用,删了也无所谓。