[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似乎真的没什么用,删了也无所谓。

Deepseath Modified from Green Hope Theme · Proudly powered by WordPress · 津ICP备09005418号-1  津公网安备 12010302001005号