Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Mysql-proxy implements read-write separation script

2025-01-16 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Database >

Share

Shulou(Shulou.com)06/01 Report--

Save the following script as / etc/init.d/mysql-proxy and grant permissions

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

#! / bin/bash## mysql-proxy This script starts and stops the mysql-proxy daemon## chkconfig:-78 3 hours processname: mysql-proxy# description: mysql-proxy is a proxy daemon for mysql# Source function library.. / etc/rc.d/init.d/functionsprog= "/ usr/local/mysql-proxy/bin/mysql-proxy" # Source networking configuration.if [- f / etc/sysconfig/network]; then. / etc/sysconfig/networkfi# Check that networking is up. [${NETWORKING} = "no"] & & exit examples 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.pidPROXY_USER= "mysql-proxy" # Source mysql-proxy configuration.if [- f / etc/sysconfig/mysql-proxy]; then. / etc/sysconfig/mysql-proxyfiRETVAL=0start () {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;; esacexit $RETVAL

two。 Provide the configuration file / etc/sysconfig/mysql-proxy for the service script as follows:

# 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 "

# pay attention to the last line, which needs to be modified according to the actual production scenario, such as

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. Copy the following to create an admin.lua file and save it to the / usr/local/mysql-proxy/share/doc/mysql-proxy/ directory:

-- [$% 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"} endfunction 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_RESULTend

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Database

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report