Dopo molte ricerche, ho finalmente trovato una soluzione.
Non sono uno scrittore, quindi farò del mio meglio per renderlo il più conciso possibile.
Per quanto ho potuto trovare, ci sono 2 possibili soluzioni:
Relè SQL
http://sqlrelay.sourceforge.net/
Questo fa esattamente quello che ha posto la domanda e molto altro ancora. Non entrerò in troppi dettagli su ciò che sono stato in grado di scoprire su questo, ma menzionerò che non era una soluzione praticabile in quanto non è trasparente. Ciò significa che il flusso è il seguente:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Quindi questo avrebbe comportato la riscrittura di tutto il nostro codice da mysql a sql relay. Non è un'opzione nel nostro caso.
Detto questo, se qualcuno sta pianificando un nuovo progetto su larga scala che richiede una delle numerose funzionalità di SQL Relay, sembra bello.
Mysql Proxy
http://forge.mysql.com/wiki/MySQL_Proxy
Questa è la soluzione che abbiamo finito per usare.
La chiave per fare questo fare ciò che vogliamo che sia fare è lo script LUA di pooling per il proxy mysql.
Questa estensione LUA è disponibile all'indirizzo:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pooling.lua
Senza entrare troppo nei dettagli, ecco alcune statistiche di base ... Tenete a mente, questo è testato a BASSO tempo di utilizzo:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Dopo essere passati a mysql-proxy e aver risolto le cose:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Come puoi vedere chiaramente, le porte TIME_WAIT su mysql sono scese quasi a nessuno.
Le connessioni ora sono infatti persistenti SENZA l'uso di mysql_pconnect / mysqli_connect (... p: hostname ...).
Vale la pena ricordare che sembrano esserci alcune impostazioni configurabili nella parte superiore dello script lua del pooler.
min_idle_connections locali
e
max_idle_connections locali
Questi sembrano essere abbastanza autoesplicativi. Tranne quello: Sembrerebbe che ogni combinazione di nome utente (e password? Non testata ... molto probabilmente non così) crea il proprio set di connessioni persistenti.
Quindi moltiplica max_idle_connections per il numero di utenti mysql unici che si collegheranno al database. E questo dovrebbe darti un'idea di quante connessioni inattive finirai per avere.
Quindi, lasciatemi ripetere, quindi questo piccolo errore colpisce alcune parole chiave per chi cerca tramite Google:
Quando si utilizza PHP è possibile avere connessioni mysql persistenti SENZA mysql_pconnect?
Sì, questo può essere fatto tramite SQL Relay se non ti dispiace ricostruire la maggior parte del codice per reindirizzare le query attraverso la loro estensione O in modo trasparente utilizzando mysql-proxy con lo script ro-pooling.lua.
Desideriamo qualcosa del genere da circa un anno.
GODERE!
mysql_pconnect
e avviare semplicemente ogni connessione con alcune "funzioni di pulizia"?