- 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
来源: http://www.linuxidc.com/Linux/2018-09/154520.htm