mysql-proxy实现读写分离脚本-创新互联

  1. 将以下脚本保存为/etc/init.d/mysql-proxy ,赋予权限

    吉县网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

    chmod 755 /etc/init.d/mysql-proxy

#!/bin/bash # # mysql-proxy This script starts and stops the mysql-proxy daemon # # chkconfig: - 78 30 # processname: mysql-proxy # description: mysql-proxy is a proxy daemon for mysql # Source function library. . /etc/rc.d/init.d/functions prog="/usr/local/mysql-proxy/bin/mysql-proxy" # Source networking configuration. if [ -f /etc/sysconfig/network ]; then     . /etc/sysconfig/network fi # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # Set default mysql-proxy configuration. ADMIN_USER="admin" ADMIN_PASSWD="admin" ADMIN_LUA_SCRIPT="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua" PROXY_OPTIONS="--daemon" PROXY_PID=/var/run/mysql-proxy.pid PROXY_USER="mysql-proxy" # Source mysql-proxy configuration. if [ -f /etc/sysconfig/mysql-proxy ]; then     . /etc/sysconfig/mysql-proxy fi RETVAL=0 start() {     echo -n $"Starting $prog: "     daemon $prog $PROXY_OPTIONS --pid-file=$PROXY_PID --proxy-address="$PROXY_ADDRESS" --user=$PROXY_USER --admin-username="$ADMIN_USER" --admin-lua-script="$ADMIN_LUA_SCRIPT" --admin-password="$ADMIN_PASSWORD"     RETVAL=$?     echo     if [ $RETVAL -eq 0 ]; then         touch /var/lock/subsys/mysql-proxy     fi } stop() {     echo -n $"Stopping $prog: "     killproc -p $PROXY_PID -d 3 $prog     RETVAL=$?     echo     if [ $RETVAL -eq 0 ]; then         rm -f /var/lock/subsys/mysql-proxy         rm -f $PROXY_PID     fi } # See how we were called. case "$1" in     start)         start         ;;     stop)         stop         ;;     restart)         stop         start         ;;     condrestart|try-restart)         if status -p $PROXY_PIDFILE $prog >&/dev/null; then             stop             start         fi         ;;     status)         status -p $PROXY_PID $prog         ;;     *)         echo "Usage: $0 {start|stop|restart|reload|status|condrestart|try-restart}"         RETVAL=1         ;; esac exit $RETVAL

2.为服务脚本提供配置文件/etc/sysconfig/mysql-proxy,内容如下所示:

# Options for mysql-proxy  ADMIN_USER="admin" ADMIN_PASSWORD="admin" ADMIN_ADDRESS="" ADMIN_LUA_SCRIPT="/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua" PROXY_ADDRESS="" PROXY_USER="mysql-proxy" PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog"

#注意最后一行,需要根据实际生产场景进行修改,比如;

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/目录中:

--[[ $%BEGINLICENSE%$  Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.  This program is free software; you can redistribute it and/or  modify it under the terms of the GNU General Public License as  published by the Free Software Foundation; version 2 of the  License.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  $%ENDLICENSE%$ --]]      function set_error(errmsg)  proxy.response = { type = proxy.MYSQLD_PACKET_ERR, errmsg = errmsg or "error" } end function read_query(packet) if packet:byte() ~= proxy.COM_QUERY then set_error("[admin] we only handle text-based queries (COM_QUERY)") return proxy.PROXY_SEND_RESULT end local query = packet:sub(2) local rows = { } local fields = { } if query:lower() == "select * from backends" then fields = {  { name = "backend_ndx",    type = proxy.MYSQL_TYPE_LONG }, { name = "address",   type = proxy.MYSQL_TYPE_STRING }, { name = "state",   type = proxy.MYSQL_TYPE_STRING }, { name = "type",   type = proxy.MYSQL_TYPE_STRING }, { name = "uuid",   type = proxy.MYSQL_TYPE_STRING }, { name = "connected_clients",    type = proxy.MYSQL_TYPE_LONG }, } for i = 1, #proxy.global.backends do local states = { "unknown", "up", "down" } local types = { "unknown", "rw", "ro" } local b = proxy.global.backends[i] rows[#rows + 1] = { i, b.dst.name,          -- configured backend address states[b.state + 1], -- the C-id is pushed down starting at 0 types[b.type + 1],   -- the C-id is pushed down starting at 0 b.uuid,              -- the MySQL Server's UUID if it is managed b.connected_clients  -- currently connected clients } end elseif query:lower() == "select * from help" then fields = {  { name = "command",    type = proxy.MYSQL_TYPE_STRING }, { name = "description",    type = proxy.MYSQL_TYPE_STRING }, } rows[#rows + 1] = { "SELECT * FROM help", "shows this help" } rows[#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state" } else set_error("use 'SELECT * FROM help' to see the supported commands") return proxy.PROXY_SEND_RESULT end proxy.response = { type = proxy.MYSQLD_PACKET_OK, resultset = { fields = fields, rows = rows } } return proxy.PROXY_SEND_RESULT end

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:mysql-proxy实现读写分离脚本-创新互联
链接分享:http://myzitong.com/article/deecid.html