MySQL Proxy

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
MySQL Proxy
software
Tip Software de baze de date
Dezvoltator MySQL AB
Ultima versiune 0.6.0 (6 septembrie 2007 )
Sistem de operare Multiplatform
Limba C.
Licență GNU GPL
( licență gratuită )
Site-ul web dev.mysql.com

MySQL Proxy este un program care se interpune între un client și un server MySQL , pentru a vă permite să efectuați operațiuni pe traficul de date, într-un mod transparent pentru utilizator. MySQL Proxy utilizează protocolul client / server MySQL extins, introdus cu versiunea 4.1.

Generalitate

MySQL Proxy este o aplicație foarte ușoară (200 KB în compilare dinamică, 1,5 MB în compilare statică cu biblioteci), care a fost concepută pentru a se interpune între un client și un server MySQL și pentru a efectua operațiuni pe pachetele trimise și primite.
Programul are puține opțiuni de configurare. Caracteristica care îl face interesant și funcțional este un interpret Lua integrat, datorită căruia este posibil să se analizeze și, eventual, să modifice pachetele transmise între client și server.
Clientul nu observă Proxy, care acționează ca un om în mijloc . Clientul se conectează cu acreditările obișnuite. Proxy interceptează cererea și se conectează la server. Din acel moment, fiecare interogare trimisă de client și rezultatele sale returnate de server trec prin Proxy.

Rețineți că MySQL Proxy nu este o aplicație malware , deși definiția dată mai sus, cu capacitatea sa de interceptare, vă poate face să credeți. Utilizarea Proxy-ului este transparentă pentru client, în ceea ce privește protocolul, adică clientul folosește serverul prin Proxy fără a observa diferențe (cu excepția cazului în care se utilizează funcții create explicit pentru Proxy). Dar Proxy utilizează un port diferit de server și, prin urmare, chiar dacă utilizarea este transparentă pentru aplicație, administratorul este conștient de existența sa. Utilizarea Proxy-ului fără acordul uneia dintre cele două părți nu este posibilă. Proxy-ul poate fi utilizat de administrator, pentru a extinde funcționalitatea serverului sau de utilizator, din același motiv. În primul caz, Proxy-ul va fi vizibil pentru toți utilizatorii. În al doilea caz, numai utilizatorul care l-a instalat pe mașina sa este conștient de funcțiile extinse.

În forma sa esențială, MySQL Proxy este un instrument de redirecționare, care trece un pachet de cerere de la client la server, preia rezultatele de la server și le transmite clientului. În transmiterea datelor, Proxy-ul poate interveni și poate efectua operațiuni asupra interogării înainte de a fi trimise sau asupra rezultatelor, înainte ca acestea să fie returnate. Modificările sunt făcute prin scripturi în Lua , care utilizează funcții predefinite pentru a modifica starea pachetelor. Funcțiile sunt după cum urmează:

  • connect_server unde puteți acționa atunci când vă conectați la server;
  • read_handshake care apare imediat după conectare;
  • read_auth unde datele de autentificare sunt transmise către server;
  • read_auth_result unde este primit rezultatul operației anterioare;
  • read_query care este activat pentru fiecare interogare trimisă către server;
  • read_query_result care este apelat atunci când proxy-ul primește rezultatul unei interogări modificate;
  • disconnect_client care se declanșează atunci când un client este deconectat.

Funcții

MySQL Proxy are două clase de funcții:

  1. Direcționați traficul către o listă predefinită de servere back-end, care pot fi doar în citire sau cu funcții complete.
  2. Editarea, adăugarea sau înlocuirea interogării trimise de client și a rezultatelor returnate de server.

În primul caz, Proxy-ul are funcții predefinite pentru a gestiona eșecul serverului principal și pentru a-l redirecționa către următorul server din listă. De asemenea, poate efectua echilibrarea încărcării, separarea interogărilor de citire și scriere între diferite servere (de exemplu, master și slave în replicare) și poate gestiona, de asemenea, un pool de conexiuni. Această caracteristică necesită foarte puțină întreținere în forma sa de bază. Pentru a gestiona cazurile critice, puteți interveni cu un script Lua . Mai mult, este încă o aplicație imatură (septembrie 2007 ) și, prin urmare, trebuie utilizată cu prudență.

Un exemplu

Al doilea caz este diferit. Pentru a modifica interogarea de ieșire sau rezultatele primite, este necesar să scrieți un program în Lua și să lansați Proxy-ul cu o opțiune care îl face să se încarce. De exemplu, acest script interceptează interogarea SELECT 1 și o rescrie ca SELECT 100 .

 - simplu.lua
funcție read_query (pachet)
  dacă pachetul: byte () ~ = proxy.COM_QUERY atunci
    întoarcere
  Sfârșit
  interogare locală = pachet: sub (2)
  dacă interogare: lower () == 'selectați 1' atunci
    query = 'SELECT 100'
    proxy.queries: append (1, string.char (proxy.COM_QUERY) .. interogare)
    returnează proxy.PROXY_SEND_QUERY
  Sfârșit
Sfârșit

Utilizare

Pentru a utiliza acest script, lansați Proxy-ul cu opțiunea corespunzătoare

 mysql_proxy - proxy-lua-script = simple.lua

În acest exemplu, dacă interogarea este SELECT 1 , Proxy pune interogarea modificată în coada internă ( proxy.queries ) și o execută.

Pentru a utiliza serverul prin proxy, trebuie să vă conectați clientul la portul proxy (implicit: 4040)

 $ mysql -u USER -pPASSWORD -h 127.0.0.1 -P 4040
Bine ați venit la monitorul MySQL. Comenzile se termină cu; sau \ g.
ID-ul conexiunii MySQL este 609
Versiune server: 5.0.45-log MySQL Community Server (GPL)
Tastați „ajutor;” sau „\ h” pentru ajutor. Tastați „\ c” pentru a goli tamponul.
mysql> SELECT 1;
+ ----- +
| 100 |
+ ----- +
| 100 |
+ ----- +
1 rând în set (0,00 sec)

Potenţial

Folosind o combinație de read_query și read_query_result, Proxy poate face una sau mai multe dintre următoarele:

  • Transmiteți interogarea către server fără modificări (implicit);
  • Editați interogarea și transmiteți-o serverului;
  • Rulați una sau mai multe interogări înainte sau după interogarea inițială;
  • Nu executați interogarea și nu întoarceți un rezultat (fals) în concordanță cu interogarea. De exemplu, după un INSERT, numărul de înregistrări modificate este returnat, chiar dacă nu a fost modificată nicio înregistrare;
  • Nu executați interogarea și nu returnați un alt rezultat decât cel solicitat (de exemplu, după un INSERT, returnați una sau mai multe înregistrări);
  • Nu executați interogarea și nu returnați un mesaj de eroare;
  • Modificați rezultatul original trimis de server;
  • Înlocuiți rezultatul serverului cu unul pe care l-ați creat.

Lista de mai sus sugerează că Proxy-ul este un instrument foarte puternic, cu care este posibil să se definească extensiile de limbă, să se filtreze interogările nedorite, să facă aplicația sigură cu monitorizarea operațiunilor etc.

Interfață de administrare

Când MySQL Proxy este activ, există două porturi disponibile:

  • 4040 cu funcțiile proxy văzute mai sus.
  • 4041 cu funcții administrative.

Ambele porturi sunt configurabile prin opțiuni de boot.

Prin conectarea clientului la portul 4041 puteți solicita starea conexiunilor și a proxy-ului.

 $ mysql -u USER -pPASSWORD -h 127.0.0.1 -P 4041
mysql> selectați * din ajutor;
+ --------------------------------- + --------------- ----------------------------- +
| comanda | descriere |
+ --------------------------------- + --------------- ----------------------------- +
| selectați * din proxy_connections | afișați informații despre conexiunile proxy |
| selectați * din proxy_config | afișați informații despre configurația proxy |
| selectați * din ajutor | afișează comenzile disponibile |
+ --------------------------------- + --------------- ----------------------------- +
3 rânduri în set (0,00 sec)
mysql> selectați * din proxy_connections;
+ ------ + -------- + ------- + ------ +
| id | tip | stat | db |
+ ------ + -------- + ------- + ------ +
| 0 | server | 0 | |
| 1 | proxy | 0 | |
| 2 | server | 10 | |
| 3 | proxy | 10 | |
| 4 | proxy | 10 | |
+ ------ + -------- + ------- + ------ +
5 rânduri în set (0,00 sec)
mysql> selectați * din proxy_config;
+ ---------------------------- + ---------------- +
| opțiune | valoare |
+ ---------------------------- + ---------------- +
| admin.address | : 4041 |
| proxy.adresa | : 4040 |
| proxy.lua_script | logs.lua |
| proxy.backend_addresses [0] | 127.0.0.1:3306 |
| proxy.fix_bug_25371 | 0 |
| proxy.profiling | 1 |
+ ---------------------------- + ---------------- +
6 rânduri în set (0,00 sec)

Interfața de administrare nu recunoaște alte comenzi.

 mysql> selectați * din tabelul_meu;
EROARE 1105 (07000): booh

Elemente conexe

linkuri externe

Software gratuit Free Software Portal : accesați intrările Wikipedia care se ocupă cu software-ul liber