这是一个疯狂的:
mysql> CREATE FUNCTION PREG_REPLACE RETURNS STRING SONAME 'lib_mysqludf_preg.so';
ERROR 1125 (HY000): Function 'PREG_REPLACE' already exists
mysql> DROP FUNCTION preg_replace;
ERROR 1305 (42000): FUNCTION (UDF) preg_replace does not exist
嗯……其实挺好笑的……
真正的问题是该函数在查询中不再被识别。尝试过重新编译、重新安装、重新启动等——不开心。UDF 来自这里: http ://www.mysqludf.org/lib_mysqludf_preg/index.php
这是在从 mysql 切换到 percona 5.5 之后发生的。UDF 在 mysql 中运行良好。
问题是: 从 mysql 升级到 percona 5.5 后如何让 PREG UDF 工作?
答案: 以下是基于 Baron 提示的答案:
从 mysql 错误日志中:
120319 9:32:06 Percona XtraDB (http://www.percona.com) 1.1.8-rel24.1 started; log sequence number 1547303885
120319 9:32:06 [ERROR] Can't open shared library 'lib_mysqludf_preg.so' (errno: 0 /usr/lib/plugin/lib_mysqludf_preg.so: cannot open shared object file: No such file or directory)
Percona 似乎在与我的标准 MySql 安装不同的目录中查找。
MySql 在 /usr/lib/mysql/plugin 中查找所有插件。Percona 正在寻找 /usr/lib/plugin
解决方案很简单——我只是在 /usr/lib 中创建了一个指向 /usr/lib/mysql/plugin 目录的符号链接,如下所示:
me@host:/usr/lib/plugin$ sudo ln -s /usr/lib/mysql/plugin ./plugin
中提琴!- 现在一切都很好。