将以下脚本保存为/etc/init.d/mysql-proxy ,赋予权限
chmod 755 /etc/init.d/mysql-proxy
<code>#!/bin/bash</code>
<code>#</code>
<code># mysql-proxy This script starts and stops the mysql-proxy daemon</code>
<code># chkconfig: - 78 30</code>
<code># processname: mysql-proxy</code>
<code># description: mysql-proxy is a proxy daemon for mysql</code>
<code># Source function library.</code>
<code>. </code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/functions</code>
<code>prog=</code><code>"/usr/local/mysql-proxy/bin/mysql-proxy"</code>
<code># Source networking configuration.</code>
<code>if</code> <code>[ -f </code><code>/etc/sysconfig/network</code> <code>]; </code><code>then</code>
<code> </code><code>. </code><code>/etc/sysconfig/network</code>
<code>fi</code>
<code># Check that networking is up.</code>
<code>[ ${NETWORKING} = </code><code>"no"</code> <code>] && </code><code>exit</code> <code>0</code>
<code># Set default mysql-proxy configuration.</code>
<code>ADMIN_USER=</code><code>"admin"</code>
<code>ADMIN_PASSWD=</code><code>"admin"</code>
<code>ADMIN_LUA_SCRIPT=</code><code>"/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua"</code>
<code>PROXY_OPTIONS=</code><code>"--daemon"</code>
<code>PROXY_PID=</code><code>/var/run/mysql-proxy</code><code>.pid</code>
<code>PROXY_USER=</code><code>"mysql-proxy"</code>
<code># Source mysql-proxy configuration.</code>
<code>if</code> <code>[ -f </code><code>/etc/sysconfig/mysql-proxy</code> <code>]; </code><code>then</code>
<code> </code><code>. </code><code>/etc/sysconfig/mysql-proxy</code>
<code>RETVAL=0</code>
<code>start() {</code>
<code> </code><code>echo</code> <code>-n $</code><code>"Starting $prog: "</code>
<code> </code><code>daemon $prog $PROXY_OPTIONS --pid-</code><code>file</code><code>=$PROXY_PID --proxy-address=</code><code>"$PROXY_ADDRESS"</code> <code>--user=$PROXY_USER --admin-username=</code><code>"$ADMIN_USER"</code> <code>--admin-lua-script=</code><code>"$ADMIN_LUA_SCRIPT"</code> <code>--admin-password=</code><code>"$ADMIN_PASSWORD"</code>
<code> </code><code>RETVAL=$?</code>
<code> </code><code>echo</code>
<code> </code><code>if</code> <code>[ $RETVAL -</code><code>eq</code> <code>0 ]; </code><code>then</code>
<code> </code><code>touch</code> <code>/var/lock/subsys/mysql-proxy</code>
<code> </code><code>fi</code>
<code>}</code>
<code>stop() {</code>
<code> </code><code>echo</code> <code>-n $</code><code>"Stopping $prog: "</code>
<code> </code><code>killproc -p $PROXY_PID -d 3 $prog</code>
<code> </code><code>rm</code> <code>-f </code><code>/var/lock/subsys/mysql-proxy</code>
<code> </code><code>rm</code> <code>-f $PROXY_PID</code>
<code># See how we were called.</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>start)</code>
<code> </code><code>start</code>
<code> </code><code>;;</code>
<code> </code><code>stop)</code>
<code> </code><code>stop</code>
<code> </code><code>restart)</code>
<code> </code><code>condrestart|try-restart)</code>
<code> </code><code>if</code> <code>status -p $PROXY_PIDFILE $prog >&</code><code>/dev/null</code><code>; </code><code>then</code>
<code> </code><code>stop</code>
<code> </code><code>start</code>
<code> </code><code>fi</code>
<code> </code><code>status)</code>
<code> </code><code>status -p $PROXY_PID $prog</code>
<code> </code><code>*)</code>
<code> </code><code>echo</code> <code>"Usage: $0 {start|stop|restart|reload|status|condrestart|try-restart}"</code>
<code> </code><code>RETVAL=1</code>
<code>esac</code>
<code>exit</code> <code>$RETVAL</code>
2.为服务脚本提供配置文件/etc/sysconfig/mysql-proxy,内容如下所示:
<code># Options for mysql-proxy </code>
<code>ADMIN_PASSWORD=</code><code>"admin"</code>
<code>ADMIN_ADDRESS=</code><code>""</code>
<code>PROXY_ADDRESS=</code><code>""</code>
<code>PROXY_OPTIONS=</code><code>"--daemon --log-level=info --log-use-syslog"</code>
#注意最后一行,需要根据实际生产场景进行修改,比如;
PROXY_OPTIONS="--daemon --log-level=info --log-file=/var/log/mysql-proxy.log --plugins=proxy
--plugins=admin --proxy-backend-addresses=192.168.141.101:3306 --proxy-read-only-backend-ad
dresses=192.168.141.102:3306 --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy
/rw-splitting.lua"
3.复制如下内容建立admin.lua文件,将其保存至/usr/local/mysql-proxy/share/doc/mysql-proxy/目录中:
<code>--[[ $%BEGINLICENSE%$</code>
<code> </code><code>Copyright (c) 2007, 2012, Oracle and</code><code>/or</code> <code>its affiliates. All rights reserved.</code>
<code> </code><code>This program is </code><code>free</code> <code>software; you can redistribute it and</code><code>/or</code>
<code> </code><code>modify it under the terms of the GNU General Public License as</code>
<code> </code><code>published by the Free Software Foundation; version 2 of the</code>
<code> </code><code>License.</code>
<code> </code><code>This program is distributed </code><code>in</code> <code>the hope that it will be useful,</code>
<code> </code><code>but WITHOUT ANY WARRANTY; without even the implied warranty of</code>
<code> </code><code>MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</code>
<code> </code><code>GNU General Public License </code><code>for</code> <code>more</code> <code>details.</code>
<code> </code><code>You should have received a copy of the GNU General Public License</code>
<code> </code><code>along with this program; </code><code>if</code> <code>not, write to the Free Software</code>
<code> </code><code>Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA</code>
<code> </code><code>02110-1301 USA</code>
<code> </code><code>$%ENDLICENSE%$ --]]</code>
<code> </code>
<code> </code><code>function</code> <code>set_error(errmsg) </code>
<code> </code><code>proxy.response = {</code>
<code> </code><code>type</code> <code>= proxy.MYSQLD_PACKET_ERR,</code>
<code> </code><code>errmsg = errmsg or </code><code>"error"</code>
<code> </code><code>}</code>
<code>end</code>
<code>function</code> <code>read_query(packet)</code>
<code> </code><code>if</code> <code>packet:byte() ~= proxy.COM_QUERY </code><code>then</code>
<code> </code><code>set_error(</code><code>"[admin] we only handle text-based queries (COM_QUERY)"</code><code>)</code>
<code> </code><code>return</code> <code>proxy.PROXY_SEND_RESULT</code>
<code> </code><code>end</code>
<code> </code><code>local</code> <code>query = packet:sub(2)</code>
<code> </code><code>local</code> <code>rows = { }</code>
<code> </code><code>local</code> <code>fields = { }</code>
<code> </code><code>if</code> <code>query:lower() == </code><code>"select * from backends"</code> <code>then</code>
<code> </code><code>fields = { </code>
<code> </code><code>{ name = </code><code>"backend_ndx"</code><code>, </code>
<code> </code><code>type</code> <code>= proxy.MYSQL_TYPE_LONG },</code>
<code> </code><code>{ name = </code><code>"address"</code><code>,</code>
<code> </code><code>type</code> <code>= proxy.MYSQL_TYPE_STRING },</code>
<code> </code><code>{ name = </code><code>"state"</code><code>,</code>
<code> </code><code>{ name = </code><code>"type"</code><code>,</code>
<code> </code><code>{ name = </code><code>"uuid"</code><code>,</code>
<code> </code><code>{ name = </code><code>"connected_clients"</code><code>, </code>
<code> </code><code>}</code>
<code> </code><code>for</code> <code>i = 1, </code><code>#proxy.global.backends do</code>
<code> </code><code>local</code> <code>states = {</code>
<code> </code><code>"unknown"</code><code>,</code>
<code> </code><code>"up"</code><code>,</code>
<code> </code><code>"down"</code>
<code> </code><code>}</code>
<code> </code><code>local</code> <code>types = {</code>
<code> </code><code>"rw"</code><code>,</code>
<code> </code><code>"ro"</code>
<code> </code><code>local</code> <code>b = proxy.global.backends[i]</code>
<code> </code><code>rows[</code><code>#rows + 1] = {</code>
<code> </code><code>i,</code>
<code> </code><code>b.dst.name, -- configured backend address</code>
<code> </code><code>states[b.state + 1], -- the C-</code><code>id</code> <code>is pushed down starting at 0</code>
<code> </code><code>types[b.</code><code>type</code> <code>+ 1], -- the C-</code><code>id</code> <code>is pushed down starting at 0</code>
<code> </code><code>b.uuid, -- the MySQL Server's UUID </code><code>if</code> <code>it is managed</code>
<code> </code><code>b.connected_clients -- currently connected clients</code>
<code> </code><code>end</code>
<code> </code><code>elseif query:lower() == </code><code>"select * from help"</code> <code>then</code>
<code> </code><code>{ name = </code><code>"command"</code><code>, </code>
<code> </code><code>{ name = </code><code>"description"</code><code>, </code>
<code> </code><code>rows[</code><code>#rows + 1] = { "SELECT * FROM help", "shows this help" }</code>
<code> </code><code>rows[</code><code>#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state" }</code>
<code> </code><code>else</code>
<code> </code><code>set_error(</code><code>"use 'SELECT * FROM help' to see the supported commands"</code><code>)</code>
<code> </code><code>type</code> <code>= proxy.MYSQLD_PACKET_OK,</code>
<code> </code><code>resultset = {</code>
<code> </code><code>fields = fields,</code>
<code> </code><code>rows = rows</code>
<code> </code><code>return</code> <code>proxy.PROXY_SEND_RESULT</code>
本文转自limingyu0312 51CTO博客,原文链接:http://blog.51cto.com/limingyu/1933927,如需转载请自行联系原作者