Depois de muita pesquisa, finalmente encontrei uma solução.
Como não sou muito escritor, farei o possível para tornar isso o mais conciso possível.
Até onde pude encontrar, existem 2 soluções possíveis:
Retransmissão SQL
http://sqlrelay.sourceforge.net/
Isso faz exatamente o que a pergunta pediu e muito mais. Não vou entrar em muitos detalhes sobre o que pude descobrir sobre isso, mas mencionarei que não era uma solução viável, pois não é transparente. Significando que o fluxo é o seguinte:
PHP -> Queries -> SQL Relay Extension -> SQL Relay -> Externally hosted MySQL
Portanto, isso envolveria reescrever todo o nosso código do mysql para o sql relay. Não é uma opção no nosso caso.
Tudo o que foi dito, se alguém está planejando um novo projeto de larga escala que requer qualquer um dos inúmeros recursos que o SQL Relay possui, parece bonito.
Mysql Proxy
http://forge.mysql.com/wiki/MySQL_Proxy
Esta é a solução que acabamos usando.
A chave para fazer isso fazer o que queremos é o script LUA em pool para o proxy mysql.
Esta extensão LUA pode ser encontrada em:
https://github.com/cwarden/mysql-proxy/blob/315ab806bb95b8223f5afd3d238eff2a40af03d8/lib/ro-pool.lua
Sem entrar em muitos detalhes, aqui estão algumas estatísticas básicas ... Lembre-se, isso é testado em um período de uso BAIXO:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
6433 38598 572537
Depois de mudar para o mysql-proxy, e deixar as coisas resolverem:
[root@HOSTNAME etc]# netstat -na | grep ":3306 " | grep TIME_WAIT | wc
32 192 2848
Como você pode ver claramente, as portas TIME_WAIT para o mysql caíram para quase nenhuma.
As conexões agora são de fato persistentes SEM usar mysql_pconnect / mysqli_connect (... p: hostname ...).
Vale ressaltar que parece haver algumas configurações configuráveis próximas à parte superior do script lua do pooler.
min_idle_connections local
e
max_idle_connections local
Estes parecem ser bastante auto-explicativos. Exceto que: Parece que cada combinação de nome de usuário (e senha? Não testada ... provavelmente não.) Cria seu próprio conjunto de conexões persistentes.
Então multiplique max_idle_connections pelo número de usuários mysql únicos que estarão se conectando ao banco de dados. E isso deve lhe dar uma idéia de quantas conexões inativas você acabará tendo.
Então, deixe-me reiterar para que este pequeno anúncio contenha algumas palavras-chave para quem pesquisa no google:
Ao usar PHP, é possível ter conexões mysql persistentes SEM mysql_pconnect?
Sim, isso pode ser feito via SQL Relay se você não se importar em reconstruir a maior parte do seu código para direcionar suas consultas através de sua extensão OU de forma transparente usando o mysql-proxy com o script ro-pooling.lua.
Há um ano que desejamos algo assim.
APRECIAR!
mysql_pconnect
e iniciar cada conexão com algumas "funções de limpeza"?