<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[SelBoo's Blog 色萝卜]]></title> 
<link>http://selboo.com.cn/index.php</link> 
<description><![CDATA[简单记录,方便自己,服务大众...]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[SelBoo's Blog 色萝卜]]></copyright>
<item>
<link>http://selboo.com.cn/post/543/</link>
<title><![CDATA[Mysql读写分离]]></title> 
<author>selboo &lt;root@selboo.com.cn&gt;</author>
<category><![CDATA[数据库]]></category>
<pubDate>Wed, 17 Jun 2009 19:09:39 +0000</pubDate> 
<guid>http://selboo.com.cn/post/543/</guid> 
<description>
<![CDATA[ 
	安装pkg-config：<br/><br/>tar zxvf pkg-config-0.23.tar.gz<br/>cd pkg-config-0.23<br/>./configure<br/>make<br/>make install<br/><br/>确保PKG_CONFIG_PATH环境变量包含了相关的pkg-config配置文件路径：<br/><br/>export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig<br/><br/>安装libevent：<br/><br/>tar zxvf libevent-1.4.10-stable.tar.gz<br/>cd libevent-1.4.10-stable<br/>./configure<br/>make<br/>make install<br/><br/>安装glib：<br/><br/>tar zxvf glib-2.20.0.tar.gz<br/>cd glib-2.20.0<br/>./configure<br/>make<br/>make install<br/><br/>1、 LUA的安装<br/>[root@localhost ~]#tar zxvf lua-5.1.2.tar.gz&nbsp;&nbsp;-C /usr/local<br/>[root@localhost ~]# cd /usr/local/<br/>[root@localhost local]# mv lua-5.1 lua<br/>[root@localhost lua]# cd lua<br/>[root@localhost lua]#make local;make install;<br/>&nbsp;&nbsp;&nbsp;&nbsp;导出环境变量：<br/>[root@localhost lua]#export LUA_CFLAGS="-I/usr/local/include" LUA_LIBS="-L/usr/local/lib -llua -ldl" LDFLAGS="-lm"<br/><br/>1. 安装<br/>下载已经编译好的安装包，或者预编译安装包均可，在这里，使用预编译版本。<br/><br/>[@s1.yejr.com ~]# tar zxf mysql-proxy-0.6.0-linux-rhas4-x86.tar.gz<br/>[@s1.yejr.com ~]# cd mysql-proxy-0.6.0-linux-rhas4-x86<br/><br/>#可以看到有2个目录<br/>[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls<br/>sbin&nbsp;&nbsp;share<br/>[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv sbin/mysql-proxy /usr/local/sbin/<br/>[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# ls share<br/>mysql-proxy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tutorial-constants.lua&nbsp;&nbsp;tutorial-packets.lua&nbsp;&nbsp;&nbsp;&nbsp; tutorial-rewrite.lua&nbsp;&nbsp;tutorial-warnings.lua<br/>tutorial-basic.lua&nbsp;&nbsp;tutorial-inject.lua&nbsp;&nbsp;&nbsp;&nbsp; tutorial-query-time.lua&nbsp;&nbsp;tutorial-states.lua<br/><br/>#将lua脚本放到/usr/local/share下，以备他用<br/>[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# mv share/mysql-proxy /usr/local/share/<br/><br/>#删除符号连接等垃圾代码<br/>[@s1.yejr.com mysql-proxy-0.6.0-linux-rhas4-x86]# strip /usr/local/sbin/mysql-proxy<br/><br/>2. 启动<br/>编译一下启动管理脚本：<br/><br/>[@s1.yejr.com ~]# vi /etc/init.d/mysql-proxy<br/><div class="code">#!/bin/sh<br/>export LUA_PATH=/usr/local/share/mysql-proxy/?.lua<br/><br/>mode=$1<br/>if &#91; -z &quot;$mode&quot; &#93; ; then<br/>&nbsp;&nbsp;mode=&quot;start&quot;<br/>fi<br/><br/>case $mode in<br/>&nbsp;&nbsp;&#039;start&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;mysql-proxy --daemon &#92;<br/>--admin-address=:4401 &#92;<br/>--proxy-address=:3307 &#92;<br/>--proxy-backend-addresses=:3306 &#92;<br/>--proxy-read-only-backend-addresses=192.168.133.232:3306 &#92;<br/>--proxy-read-only-backend-addresses=10.10.74.61:3306 &#92;<br/>--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua<br/>&nbsp;&nbsp;&nbsp;&nbsp;;;<br/><br/>&nbsp;&nbsp;&#039;stop&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;killall mysql-proxy<br/>&nbsp;&nbsp;&nbsp;&nbsp;;;<br/><br/>&nbsp;&nbsp;&#039;restart&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;if $0 stop ; then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$0 start<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&nbsp;&quot;retart failed!!!&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;fi<br/>&nbsp;&nbsp;&nbsp;&nbsp;;;<br/>esac<br/>exit 0</div><br/><br/>现在解释一下启动脚本：<br/>--daemon 采用daemon方式启动<br/>--admin-address=:4401 指定mysql proxy的管理端口，在这里，表示本机的4401端口<br/>--proxy-address=:3307 指定mysql proxy的监听端口，也可以用 127.0.0.1:3307 表示<br/>--proxy-backend-addresses=:3306 指定mysql主机的端口<br/>--proxy-read-only-backend-addresses=192.168.1.1:3306 指定只读的mysql主机端口<br/>--proxy-read-only-backend-addresses=192.168.1.2:3306 指定另一个只读的mysql主机端口<br/>--proxy-lua-script=/usr/local/share/mysql-proxy/rw-splitting.lua 指定lua脚本，在这里，使用的是rw-splitting脚本，用于读写分离<br/><br/>完整的参数可以运行以下命令查看：<br/><br/>mysql-proxy --help-all<br/><br/>运行以下命令启动/停止/重启mysql proxy：<br/><br/>[@s1.yejr.com ~]# /etc/init.d/mysql-proxy start<br/>[@s1.yejr.com ~]# /etc/init.d/mysql-proxy stop<br/>[@s1.yejr.com ~]# /etc/init.d/mysql-proxy restart<br/><br/>3. 试用<br/><br/>[@s1.yejr.com ~]# mysql -h127.0.0.1 -uroot -P3307<br/><br/>mysql> show processlist;<br/>+-------+------+----------------+------+---------+------+-------+------------------+<br/>&#124; Id&nbsp;&nbsp;&nbsp;&nbsp;&#124; User &#124; Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; db&nbsp;&nbsp; &#124; Command &#124; Time &#124; State &#124; Info&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+-------+------+----------------+------+---------+------+-------+------------------+<br/>&#124; 30052 &#124; root &#124; localhost:9656 &#124; NULL &#124; Query&nbsp;&nbsp; &#124;&nbsp;&nbsp;&nbsp;&nbsp;0 &#124; NULL&nbsp;&nbsp;&#124; show processlist &#124;<br/>+-------+------+----------------+------+---------+------+-------+------------------+<br/><br/>可以看到，产生了一个新连接。<br/><br/>用sysbench测试一下，看会不会挂掉：<br/><br/>[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 &#92;<br/>--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test prepare<br/><br/>[@s1.yejr.com ~]# sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 &#92;<br/>--mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-db=test run<br/>.........<br/>.........<br/>Threads fairness:<br/>&nbsp;&nbsp;&nbsp;&nbsp;events (avg/stddev):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10000.0000/0.00<br/>&nbsp;&nbsp;&nbsp;&nbsp;execution time (avg/stddev):&nbsp;&nbsp; 23.0387/0.00<br/><br/>4. 其他<br/>mysql proxy还可以实现连接池的功能，这在很多LAMP开发中是软肋，因此，有了mysql proxy，就可以不用再担心连接数超限的问题了。<br/>如果使用rw-splitting.lua脚本的话，最好修改以下2个参数的默认值：<br/><br/>min_idle_connections = 1<br/>max_idle_connections = 3<br/>Tags - <a href="http://selboo.com.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://selboo.com.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a>
]]>
</description>
</item>
</channel>
</rss>