我收到此错误?错误:(1226)用户'qe'已超出'max_user_connections'资源(当前值:30)

时间:2017-01-06 19:15:52

标签: php mysql database mysqli server

所以,在研究了这个很多之后,我正在为遇到这个并找到出路的人寻求帮助。

我们为客户开发了一个PTC脚本并且工作正常,但随着用户的增长,它开始显示错误,如下所示:

错误:(1226)用户'qe'已超出'max_user_connections'资源(当前值:30)

现在在寻求帮助之后,有人说它与服务器有关,而其他人指出这是与脚本数据库设计有关的问题。

期待一种解决这个问题的方法。已经尝试了很多东西。

目前使用godaddy托管,他们将限制从30增加到50,但我确定问题会再次出现。

1 个答案:

答案 0 :(得分:-1)

数据库没有问题,问题在于如何处理来自软件的数据库连接。

您的脚本设置方式是,与Web服务器的每个连接也会打开与MySQL的连接。那不是你想要的场景。

提高限制不会解决问题,它只会延迟另一个错误。你应该做的是使用持久连接。

首选使用php-fpm而不是mod_php等服务器API的原因之一是因为启动了一定数量的PHP进程并创建了与服务的连接池。

流程如下:

  • 使用php-fpmApachenginx可以使用FCGI界面与php-fpm进程通信
  • php-fpm筹集相对较少的子流程。这不应该过大,默认配置通常会有效,我会猜测你没有运行hexacore系统,所以4-6个子进程应该没问题
  • 使用持久性MySQL连接

这是做什么的?您的服务器接受请求并将其发送到php-fpmApache会在空闲时对其进行处理。每个进程使用1个与MySQL的连接。这意味着你永远不会像你一样达到某种严格的限制。

如果您的服务器很忙,服务器应该排队请求,直到PHP能够处理它们。无论您使用nginx还是php-fpm,这种方法都能很好地运作。

如果您的网站很忙,那么Web服务器可能会更快地接受连接并提供PHP处理动态内容的静态内容。在这种情况下,您可以选择添加另一台运行import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.security.GeneralSecurityException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x500.X500NameBuilder; import org.bouncycastle.asn1.x500.style.BCStyle; import org.bouncycastle.openssl.PEMWriter; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder; import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder; public class CreateKeyTest { public static void main(String[] args) throws OperatorCreationException, IOException, GeneralSecurityException { KeyPairGenerator kpg; KeyPair kp; RSAPublicKey pubKey; RSAPrivateKey privKey; FileOutputStream out; KeyStore ks; FileInputStream in; FileInputStream bFis; try { ks = KeyStore.getInstance("JKS"); kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024); kp = kpg.generateKeyPair(); pubKey = (RSAPublicKey) kp.getPublic(); privKey = (RSAPrivateKey) kp.getPrivate(); // generate CSR ContentSigner sign = new JcaContentSignerBuilder("SHA1withRSA").build(privKey); X500NameBuilder nBuilder = new X500NameBuilder(); nBuilder.addRDN(BCStyle.CN, "TestCSR"); nBuilder.addRDN(BCStyle.C, "ER"); nBuilder.addRDN(BCStyle.E, "test@test.com"); X500Name name = nBuilder.build(); PKCS10CertificationRequestBuilder cerReq = new JcaPKCS10CertificationRequestBuilder(name, pubKey); PKCS10CertificationRequest request = cerReq.build(sign); PEMWriter pWr = new PEMWriter(new FileWriter(new File("D:\\test.csr"))); pWr.writeObject(request); pWr.flush(); pWr.close(); bFis = new FileInputStream("D:\\test.csr"); BufferedInputStream ksbufin = new BufferedInputStream(bFis); X509Certificate certificate = (X509Certificate) CertificateFactory.getInstance("X.509") .generateCertificate(ksbufin); ks.setKeyEntry("RSA_key", kp.getPrivate(), "changeit".toCharArray(), new java.security.cert.Certificate[] { certificate }); out = new FileOutputStream("key.store"); ks.store(out, "changeit".toCharArray()); System.out.println("New Keystore Generated"); out.close(); } catch (KeyStoreException | IOException | CertificateException | NoSuchAlgorithmException | OperatorCreationException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } } 的物理机器(或更多)。对于两个提到的Web服务器,指示您的Web服务器在为PHP提供服务的计算机之间进行循环操作是微不足道的。

最重要的是,您希望以最佳方式利用资源。在每个请求上打开和关闭MySQL连接都不是最佳选择。池连接是。