mysql proxy lua_mysql-proxy中的admin-lua-script
[root@ecs-7b55 lua]#cat admin.lua--[[$%BEGINLICENSE%$Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.This program is free software; you can redistribute it and/ormodify it
[root@ecs-7b55 lua]#cat admin.lua--[[$%BEGINLICENSE%$
Copyright (c) 2008, 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%$ --]]
functionset_error(errmsg)
proxy.response={type =proxy.MYSQLD_PACKET_ERR,
errmsg= errmsg or "error"}end
functionread_query(packet)if packet:byte() ~= proxy.COM_QUERY thenset_error("[admin] we only handle text-based queries (COM_QUERY)")returnproxy.PROXY_SEND_RESULTend
local query = packet:sub(2)local rows ={ }local fields ={ }if query:lower() == "select * from backends" thenfields={
{ 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" thenfields={
{ 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"}elseset_error("use 'SELECT * FROM help' to see the supported commands")returnproxy.PROXY_SEND_RESULTendproxy.response={type =proxy.MYSQLD_PACKET_OK,
resultset={
fields=fields,
rows=rows
}
}returnproxy.PROXY_SEND_RESULTend
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)