分类: Mysql/postgreSQL
2013-01-02 23:48:44
MySQL作为服务器的后端,当单台不能满足要求时,需要多台MySQL。多台MySQL该如何组网,才能满足需要,同时也能便于扩容,具备一定的扩展性。目前比较熟知的方案就是mysql-proxy和cluster。
mysql-cluster目前尚不稳定,而且也很耗内存,硬件成本和研发及维护成本都比较高。
mysql-proxy则是一种比较廉价的方案。由他实现读写分离,当然还有其他的特性,如故障切换,负载均衡 等。
下面描述在Centos 5.8下安装和测试mysql-proxy,软件的版本信息如下:
mysql-proxy: 0.8.2
lua: 5.1.4
libevent: 1.4.13
glib: 2.24.2
安装过程中遇到很多的问题,一开始选择mysql-proxy 0.8.3,按照mysql官方文档安装,
但是编译过程中还是出现很多错误,因此直接放弃了。
选择mysql-proxy 0.8.2 ,也出现不少问题,那是因为lua的版本有问题。
尝试过lua 5.1.0,5.1.2, 都存在问题。
最后5.1.4版本,不论是lua_load的接口参数,还是一些API都有定义了。
编译过程中还出现了链接错误,主要是因为lua给出的库是静态库;
重新组装成动态库,动态库组装方式还必须是gcc -shared -o liblua.so *.o(需要先将编译的静态库解出来 ar -x liblua.a),因为gcc版本是4.1.2的,不能用ld -shared;
还需要修改mysql-proxy的makefile,主要是MYSQL_LIBS中没有包含-llua -ldl(当然也可以修改configure文件中的MYSQL_LIBS来做,从而不需要改Makefile)。
LUA_LIBS中没有没有包含-llua -ldl可以通过export LUA_LIBS="-L/usr/local/lib -ldl -llua"完成
在configure之前,最好export LUA_CFLAGS=-I/usr/local/include 和 export LUA_LIBS。
如此,才能顺利编译通过。
最后运行mysql-proxy -V 时,出现动态库找不到路径以及selinux的问题;通过设置环境变量LD_LIBRARY_PATH和关闭selinux,最终mysql-proxy能正常启动。