MySQL Proxy
MySQL Proxy è un programma che si interpone fra un client e un server MySQL, per consentire di effettuare operazioni sul traffico di dati, in maniera trasparente per l'utente. MySQL Proxy usa il protocollo client/server esteso di MySQL, introdotto con la versione 4.1. GeneralitàMySQL Proxy è un'applicazione molto leggera (200 KB in compilazione dinamica, 1.5 MB in compilazione statica con le librerie), che è stata disegnata per interporsi fra un client e un server MySQL ed eseguire operazioni sui pacchetti inviati e ricevuti. Si noti che MySQL Proxy non è un'applicazione di malware, anche se la definizione resa sopra, con la sua possibilità di intercettazione, potrebbe farlo credere. L'uso del Proxy è trasparente per il client, in materia di protocollo, ovvero il client usa il server tramite il Proxy senza avvertire differenze (tranne quando usa funzioni esplicitamente create per il Proxy). Ma il Proxy usa una porta diversa dal server, e pertanto, anche se l'uso è trasparente per l'applicazione, l'amministratore è conscio della sua esistenza. L'uso del Proxy senza consenso di una delle due parti non è possibile. Il Proxy può essere usato dall'amministratore, per ampliare le funzionalità del server, o dall'utente, per lo stesso motivo. Nel primo caso, il Proxy sarà visibile a tutti gli utenti. Nel secondo caso solo l'utente che l'ha installato nella sua macchina è al corrente delle funzioni estese. Nella sua forma essenziale, MySQL Proxy è uno strumento di ridirezione, che passa un pacchetto di richiesta dal client al server, prende dal server i risultati, e li passa al client. Nel passaggio di dati, il Proxy può intervenire, ed effettuare operazioni sulla query prima che venga inviata, o sui risultati, prima che vengano restituiti. Le modifiche vengono effettuate tramite script in Lua, che usano funzioni predefinite per alterare lo stato dei pacchetti. Le funzioni sono le seguenti:
FunzioniMySQL Proxy ha due classi di funzioni:
Nel primo caso, il Proxy ha delle funzioni predefinite per gestire la caduta del server primario, e ridirigerla al server successivo nella lista. Può anche effettuare il bilanciamento di carico, la separazione fra query di lettura e scrittura fra vari server (per esempio master e slave in replicazione) e può anche gestire un pool di connessioni. Questa funzione richiede pochissima attività di manutenzione nella sua forma base. Per gestire i casi critici, è possibile intervenire con uno script Lua. Si tratta, peraltro, di un'applicazione ancora immatura (Settembre 2007), e pertanto da usare con cautela. Un esempioIl secondo caso è differente. Per modificare la query in uscita o i risultati in entrata, è necessario scrivere un programma in Lua e lanciare il Proxy con un'opzione che lo fa caricare. Per esempio, questo script intercetta la query SELECT 1 e la riscrive come SELECT 100. -- simple.lua function read_query(packet) if packet:byte() ~= proxy.COM_QUERY then return end local query = packet:sub(2) if query:lower() == 'select 1' then query = 'SELECT 100' proxy.queries:append(1, string.char(proxy.COM_QUERY) .. query) return proxy.PROXY_SEND_QUERY end end UsoPer usare questo script, si lancia il Proxy con l'apposita opzione mysql_proxy—proxy-lua-script=simple.lua In questo esempio, se la query è SELECT 1, il Proxy inserisce la query modificata nella coda interna (proxy.queries) e la esegue. Per usare il server tramite il Proxy, bisogna collegare il client alla porta del proxy (default: 4040) $ mysql -u UTENTE -pPASSWORD -h 127.0.0.1 -P 4040 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 609 Server version: 5.0.45-log MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql > SELECT 1; +-----+ | 100 | +-----+ | 100 | +-----+ 1 row in set (0.00 sec) PotenzialitàUsando una combinazione di read_query e read_query_result, il Proxy può effettuare una o più delle seguenti operazioni:
La lista qui sopra fa capire che il Proxy è uno strumento molto potente, con cui è possibile definire estensioni del linguaggio, filtrare query indesiderate, rendere l'applicazione sicura con il monitoraggio delle operazioni, e così via. Interfaccia di amministrazioneQuando MySQL Proxy è attivo, ci sono due porte disponibili:
Entrambe le porte sono configurabili tramite opzioni di avvio. Collegando il client alla porta 4041 si può richiedere lo stato delle connessioni e del Proxy. $ mysql -u UTENTE -pPASSWORD -h 127.0.0.1 -P 4041 mysql> select * from help; +---------------------------------+--------------------------------------------+ | command | description | +---------------------------------+--------------------------------------------+ | select * from proxy_connections | show information about proxy connections | | select * from proxy_config | show information about proxy configuration | | select * from help | show the available commands | +---------------------------------+--------------------------------------------+ 3 rows in set (0.00 sec) mysql> select * from proxy_connections; +------+--------+-------+------+ | id | type | state | db | +------+--------+-------+------+ | 0 | server | 0 | | | 1 | proxy | 0 | | | 2 | server | 10 | | | 3 | proxy | 10 | | | 4 | proxy | 10 | | +------+--------+-------+------+ 5 rows in set (0.00 sec) mysql> select * from proxy_config; +----------------------------+----------------+ | option | value | +----------------------------+----------------+ | admin.address | :4041 | | proxy.address | :4040 | | proxy.lua_script | logs.lua | | proxy.backend_addresses[0] | 127.0.0.1:3306 | | proxy.fix_bug_25371 | 0 | | proxy.profiling | 1 | +----------------------------+----------------+ 6 rows in set (0.00 sec) L'interfaccia di amministrazione non riconosce altri comandi. mysql> select * from mia_tabella; ERROR 1105 (07000): booh Voci correlateCollegamenti esterni
|
Portal di Ensiklopedia Dunia