MySQL Proxy
Acest articol sau secțiune despre subiectul software nu menționează sursele necesare sau cei prezenți sunt insuficienți . |
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:
- Direcționați traficul către o listă predefinită de servere back-end, care pot fi doar în citire sau cu funcții complete.
- 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
- Site-ul oficial , pe dev.mysql.com .
- MySQL Proxy , pe packages.debian.org .
- ( EN ) MySQL Forge [ link rupt ] , pe mysql.com .
- Descărcați ( EN ), de la dev.mysql.com .
- ( RO ) Manual ( PDF ), la downloads.mysql.com . Adus la 24 februarie 2017 .
- (RO) Noțiuni introductive despre MySQL Proxy - articol pentru început.