Boston MySQL User Group Monday, September 24th, 2007
MySQL Proxy
Sheeri Kritzer, MySQL DBA http://www.sheeri.com awfief@gmail.com Technocation, Inc. http://www.technocation.org
Overview
Architecture Lua Examples
Architecture
Proxy Flexibility lies in simplicity
Change what's sent Change what's received Change where it's sent Add functionality
Override Functions
read_query() read_query_result() connect_server()
Override Functions (continued)
read_handshake() read_auth() read_auth_result()
Starting mysql-proxy
Specify lua script Default proxy_backend_address=127.0.0.1:3306 Default proxy_address =:4040
But First, Some Lua!
Fast, small scripting language Stable, mature lua.org, lua-users.org
Lua Comments
-- comment, whole or mid-line --[[ a multi-line comment --]] NOT #, // or /* */ !!
Lua Commands
if ... then ... end statement == operator function <name> ( [args] ) ... end
Lua Commands
if ... then ... end statement == operator function <name> ( [args] ) ... end
Technically, <name> = function ( [args ] ) ... end
Lua Object Methods
string:byte([i],[j])
i defaults to 1; j defaults to i
string:sub(i,[j])
j defaults to -1 (length of string)
Specific to MySQL Proxy
proxy.COM_QUERY Finally, the example!
Specific to MySQL Proxy
proxy.COM_QUERY Finally, the example! Note: lua script can change on the fly!
Tokens
mysql-proxy 0.6.0 (current) Avoids the need for regular expressions Adds knowledge
read_query()
Query modification/injection Query logging Query redirecting
read_query_result()
Must exist when proxy.PROXY_SEND_QUERY used in read_query() Monitoring/Auditing Query redirecting
connect_server()
proxy.connection
backend_ndx thread_id
proxy.servers
address connected_clients state
read_handshake()
Server information mysqld_version thread_id
read_handshake()
scramble server_addr client_addr
read_auth()
username password (encrypted, nondeterministic) default db
read_auth()
The good stuff! Can reject logins Watch the watcher!
read_auth_result()
OK Error Result Packet, not Command Packet
mysql-proxy wish list
Startup scripts Integration with my.cnf, my.ini config files HA
Feedback?
Other ideas Questions Hackfest!