• 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/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
  • 相关阅读:
    Interesting Finds: 2008.06.12
    8月19号
    8月22号
    8月20号
    8月21号
    第七章 Nginx配置虚拟主机
    第六章 Nginx配置文件详解
    第五章 Nginx搭建上传作业平台
    sqlserver2005提供的xml数据类型操作xml串
    事必躬亲利与弊
  • 原文地址:https://www.cnblogs.com/chenjianxiang/p/7815341.html
Copyright © 2020-2023  润新知