CentOS 5.2 MySQL 5.1.44にmycacheを入れてみる2

 ソースのIPアドレスがうまく調整できないのでソースを見てみる。

  • mycache.cc 496行目
thread_t::start_server(unsigned host, unsigned short port, int num_threads)

↓intを追加

thread_t::start_server(unsigned int host, unsigned short port, int num_threads)
  • mycache.hh 182行目
182     static bool start_server(unsigned host, unsigned short port, int num_threads);

↓intを追加

182     static bool start_server(unsigned int host, unsigned short port, int num_threads);

 バイト長が指定されてないのが原因?64bit環境であればうまくいく??とりあえずIPアドレスlong指定しておいて問題ないのでlongを指定。unsined intを指定しておく。unsined longだと今度は64bit環境でダメ。省略してunsignedだけの場合、普通はunsigned intになる筈だけど、なぜunsigned charになっているのは謎。

cd /usr/local/src/mycache
g++ -DMYCACHED_USE_EPOLL=1 -shared -fPIC -Wall -g -O2 \
-I ../mysql-5.1.44/include \
-I ../mysql-5.1.44/sql \
-I ../mysql-5.1.44/regex \
mycached_as_udf.cc -o mycached_as_udf.so

プラグインを停止する

  • mycachedを止める
SELECT mycached_stop();
DROP FUNCTION mycached_start;
DROP FUNCTION mycached_stop;

プラグインを再度登録

cp mycached_as_udf.so /usr/local/mysql/lib/mysql/plugin/
CREATE FUNCTION mycached_start RETURNS INT SONAME 'mycached_as_udf.so';
CREATE FUNCTION mycached_stop RETURNS INT SONAME 'mycached_as_udf.so';

サンプルの通りホストのIPアドレスが0だと、すべてのインターフェース(グローバル側も)にて公開されてしまう。ローカルな環境または、iptablesでフィルタリングしていない場合は127.0.0.1、または192.168.0.x等のプライベートなIPアドレスを設定しておこう。尚、ホストの設定はINT型なので、inet_atonで変換して設定する。

SELECT mycached_start(inet_aton('127.0.0.1'), 11211, 4);

今度はうまく行った!!
 

*1:以下はプラグインフォルダが/usr/local/mysql/lib/mysql/plugin/の場合、環境によって適時修正