Get the App
SLTechnology News&Howtos  ›  Database  › 

Mysql-proxy implements read-write separation script

Shulou Source: shulou.com Published: 2022-06-01 18:44:13 09月24日 Update

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

Tags: Scripts content files one line scenarios actual permissions directories services production configuration Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Shulou Tech Info Redmi NVidia MariaDB MySQL