23. Lua examples Deny all queries to any backend DB: function read_query(packet) if string.byte(packet) == proxy.COM_QUERY then local fields = { } local rows = { } fields = { { name = “ message from DBA ”, type =proxy.MYSQL_TYPE_STRING}, } rows[1] = { “ maintenance ”} proxy.respose = { type = proxy.MYSQLD_PACKET_OK, resultset = { fields = fields, rows = rows } } return proxy.PROXY_SEND_RESULT –means bypass backend, return to client now end end
24.
25.
26.
27.
28. Choose your backend DB based on which IP address, or which mysql user the client has.
29. Modify result set by adding or removing a column from the returned table.
38. The admin interface Function read_query(packet) If packet:byte() ~= proxy.COM_QUERY then return_error(“ [admin] we only handle COM_QUERY ”); --user defined end Local rows = { } local fields = { } – no need for a semicolon in Lua if packet:sub(2) == “ls” then – if query is an ls fields = { { name = “ backend_ndx ”, type = proxy.MYSQL_TYPE_LONG }, { name = “ address ” , type = proxy.MYSQL_TYPE_STRING } , { name = “ connected_clients ”, type = proxy.MYSQL_TYPE_LONG}, } for i = 1 , #proxy.global.backends do Local b = proxy.global.backends[i] rows[#rows + 1 ] = { i, b.dst.name, b.connected_clients } end end … Now build proxy.response and return with proxy.PROXY_SEND_RESULT