CodeSnippet/doc/mysql2redis.md

5.1 KiB
Raw Permalink Blame History

mysql2redis

STATUS

draft

INTRO

This doc tells users how to install mysql2redis in linux env. Mysql2redis is mysql UDF(user-defined function) dynamic library, which is used to update redis when mysql update.

DENPENDENCY

  1. jemalloc
  2. apr
  3. apr-util
  4. hiredis
  5. lib_mysqludf_json

INSTALL DEPS

QA

Install apr error

  1. /usr/local/apr/include/apr-1/apr.h:358:1: error: unknown type name off64_t
  • sudo vi /usr/local/apr/include/apr-1/apr.h in line 358
  • add line typedef long off64_t;
  • before typedef off64_t apr_off_t;
  • message as follow:

. vagrant@precise32 ~/mysql2redis
% make
gcc -Werror -O2 -g /usr/bin/mysql_config --include
-I/usr/local/include -I/usr/local/apr/include -I. -fPIC
-shared -rdynamic lib_mysqludf_redis.c utils.c\
-lhiredis -L"/usr/lib64/mysql/plugin" -L/usr/local/apr/lib -lapr-1 -laprutil-1 -ljemalloc -o "/usr/lib64/mysql/plugin"/lib_mysqludf_redis_v2.so
In file included from lib_mysqludf_redis.c:50:0:
/usr/local/apr/include/apr-1/apr.h:358:1: error: unknown type name off64_t
lib_mysqludf_redis.c: In function check_error:
lib_mysqludf_redis.c:271:13: error: format not a string literal and no format arguments [-Werror=format-security]
cc1: all warnings being treated as errors
make: *** [linux] Error 1

Install mysql2redis

  1. lib_mysqludf_redis.c:271:13: error: format not a string literal and no format arguments [-Werror=format-security]
    • vi lib_mysqludf_redis.c in line 271
    • /fprintf(pFile,buf)/
    • fputs(buf, pFile);
    • message append follow:

% make
gcc -Werror -O2 -g /usr/bin/mysql_config --include -I/usr/local/include -I/usr/local/apr/include -I. -fPIC -shared -rdynamic lib_mysqludf_redis.c utils.c\
-lhiredis -L"/usr/lib64/mysql/plugin" -L/usr/local/apr/lib -lapr-1 -laprutil-1 -ljemalloc -o "/usr/lib64/mysql/plugin"/lib_mysqludf_redis_v2.so
lib_mysqludf_redis.c: In function check_error: lib_mysqludf_redis.c:271:13: error: format not a string literal and no format arguments [-Werror=format-security]
cc1: all warnings being treated as errors
make: *** [linux] Error 1

Install hiredis

  1. install hiredis
    • make: Nothing to be done for `all'.
    • sudo make install
    • message append follow:

vagrant@precise32 ~/sw/hiredis
% sudo make install
mkdir -p /usr/local/include/hiredis /usr/local/lib
cp -a hiredis.h async.h adapters /usr/local/include/hiredis
cp -a libhiredis.so /usr/local/lib/libhiredis.so.0.10
cd /usr/local/lib && ln -sf libhiredis.so.0.10 libhiredis.so.0
cd /usr/local/lib && ln -sf libhiredis.so.0 libhiredis.so
cp -a libhiredis.a /usr/local/lib

Trigger error: can't open shared library

  1. vagrant@precise32 ~ % mysql -u root -p < mysql_cmd.sql
  2. Enter password:
  3. ERROR 1126 (HY000) at line 5: Can't open shared library 'lib_mysqludf_redis_v2.so' (errno: 0 libexpat.so.0: cannot open shared object file: No such file or directory)

mysql> CREATE FUNCTION redis_servers_set_v2 RETURNS int SONAME "lib_mysqludf_redis_v2.so";
ERROR 1126 (HY000): Can't open shared library
'lib_mysqludf_redis_v2.so' (errno: 0 libhiredis.so.0.10: cannot open
shared object file: No such file or directory)

Check dependcy

% sudo make
gcc -Werror -O2 -g /usr/bin/mysql_config --include
-I/usr/local/include -I/usr/local/apr/include -I. -fPIC -shared
-rdynamic lib_mysqludf_redis.c utils.c\
-lhiredis -L"/usr/lib/mysql/plugin" -L/usr/local/apr/lib
-lapr-1 -laprutil-1 -ljemalloc -o
"/usr/lib/mysql/plugin"/lib_mysqludf_redis_v2.so
/usr/local/apr/lib
/usr/lib
ldd /usr/lib/mysql/plugin/lib_mysqludf_redis_v2.so