I'm trying to install lib_mysqludf_sys.so in mysql to create sys_exec function which will run an external java programm ..
first of all i issued this command :
CREATE FUNCTION sys_exec RETURNS INT SONAME 'lib_mysqludf_sys.so';
and i got this error :
ERROR 1126 (HY000): Can't open shared library 'lib_mysqludf_sys.so' (errno: 0 /usr/lib/mysql/plugin/lib_mysqludf_sys.so: wrong ELF class: ELFCLASS32)
this error is due to the 64 bit os…
i'm using 64 bit Ubuntu and this library file is of 32 bit.
I'm not getting the library of 64 bit..
I have gone trough this :
gcc -Wall -m64 -I/usr/include/mysql -I. -shared lib_mysqludf_sys.c -o /usr/lib/lib_mysqludf_sys.so -fPIC
this is also giving error that file not present ..how should i resolve this
Best Answer
You didn't say, in your question what the "file not present" message was, but I'm guessing it's this:
That makes sense, because you're telling gcc to write the file to /usr/lib/lib_mysqludf_sys.so... that's the
-o
option in your command line. Give gcc the path MySQL is expecting and the rest of the installation should work.Also, whatever you're planning to do with this... don't say I didn't recommend against it. You're introducing both a potential security vulnerability and potentional performance and stability liability if these tools are deployed. This is not because there's anything wrong with the utility, but because of the amount of somewhat unorthodox functionality it opens up.
It's pretty cool, I admit. The lib_mysqludf_sys group of user-defined functions allow some interesting but easily-misappropriated capabilities, letting you spawn system commands and get either their generated output with
sys_eval()
or their return value withsys_exec()
but really, I tend to suspect there's a reason why MySQL doesn't have these capabilities built in.Update to address this error message:
The statement in question is directing "gcc" to compile a 64-bit version from the source code, which is found in lib_mysqludf_sys.c. This is one of the files you downloaded, so, to compile it, you need to be inside the directory where you downloaded the lib_mysqludf_sys files. This error suggests that you aren't. The download package isn't limited to 32 bit, it's just that it only builds a 32 bit version unless you use the
gcc -m64 -fPIC ...
statement.