SQLSTATE[HY000] [1040] Too many connections
Manchmal, wenn ich offen meine Fehler-log-Datei sehe ich, das dieser Fehler
[14-Jun-2014 19:09:55 UTC] PHP Fatal error: Uncaught exception
'PDOException' with message 'SQLSTATE[HY000] [1040] Zu viele
verbindungen' in /home/root/products/db.php:2Stack trace: /home/root/products/db.php(2):
PDO->__construct('mysql:host=loca...', 'Datenbank', 'password')/home/root/products/by-brand.php(2): include_once('/home/root/...')
{main} thrown in /home/root/products/db.php auf der Linie 2
[14-Jun-2014 19:15:11 UTC] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error oder access
violation: 1286 Unknown storage engine InnoDB in
/home/root/products/detail.php:8Stack trace: /home/root/products/name.php(8): PDO->prepare('select *
von p...'){main} thrown in /home/root/products/name.php auf der Linie 8
Ich versuche, dieses Problem zu lösen, indem Sie das schließen jedes Skript mithilfe $db=null;
aber es scheint nicht zu funktionieren.
Ich kontaktierte die service-provider. Sie sagen, alles funktioniert einwandfrei. Sie müssen prüfen, Fehler am Ende. Ich habe gerade ein paar user.
Warum ich somestimes diese Fehlermeldung erhalten?
Mein hosting unlimited: unbegrenzter Speicherplatz. unbegrenzte Bandbreite, aber immer noch bekomme ich diese Fehlermeldung. Ich weiß nicht, wie kann ich dieses Problem lösen. Ich hoffe, dass ich meine website größer ist, aber diese Fehler machen mich verwirrt
Meine db.php die Datei hat diesen code. Können Sie überprüfen, ob dieser in Ordnung? Vielleicht ist dies das problem verursacht.
db.php
$db = new PDO('mysql:host=localhost;dbname=mobiles;charset=utf8', 'root', '**somePassword**');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
du meinst, ich brauche nicht zu verwenden, gleiche config-Datei mit allen Skripten? oder was? erklären Sie es, weil bin neu in pdo::
Sagen Sie Ihre db-Verbindung in 1 Datei sagen: dbconfig.php das Sie nur einmal auf jeder Seite, erfordert eine db-Verbindung.
"Unbegrenzter Speicherplatz" ist eine Lüge. Nicht verwenden hosts liegen.
Ich habe Unbegrenzten Speicherplatz auf meinem godaddy-server obwohl, obwohl Speicherplatz selbst hat eine endliche Menge, die ich denke, Sie sind immer an der Erweiterung Ihrer Speicherkapazität.
InformationsquelleAutor developer | 2014-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nichts falsch mit Ihrer Verbindung code.
Auf eine gemeinsamen hosting "unlimited" bedeutet anderen Benutzer uneingeschränkt mit Ihrer Ressource verwenden. Bedeutet, Sie können Essen, bis die gesamte pool, während Sie Ihren Verbrauch bescheiden bleibt.
Wie du ja schon gesagt worden in den Kommentaren, nicht mit diesem host.
InformationsquelleAutor Your Common Sense
Dies ist eine Grenze von Datenbank-Konfiguration. Wenn Sie über die Berechtigung zum Bearbeiten der Konfigurations-Datei des Datenbank-service können Sie ändern
max_connections
Wert.Einen Blick:
http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html
Können Sie versuchen, das SQL-Abfrage (achten Sie darauf, über diesem Wert!)
- und dies, um den aktuellen Wert aller Variablen:
oder (für bestimmte Variablen):
Durch die Art und Weise, versuchen Sie
PDO object
zunull
wenn Sie es nicht brauchen. Dies wird in enger Verbindung zu Ihrer Datenbank und PHP wartet nicht, bis Skript zu beenden, um in der Nähe von aktiven verbindungen. (Oh, du hast es, sorry, werde ich nicht Bearbeiten, es zu löschen. Erhalten Sie es als Hinweis)InformationsquelleAutor fntneves
In Situationen, In der zu wenig Arbeitsspeicher oder zu wenig Ressourcen, erste die Ursache ermitteln.
Tritt das problem in Ihrem system für die Entwicklung? Oder erscheint es in Ihrer Produktion?
Wenn man in der dev-system, ist es sehr wahrscheinlich ein schwere technische Fehler. Wenn man in der production system, das problem könnte sein, aufgrund system Grenzen (nicht unbedingt das system zu überlasten).
Meisten server-Anwendungen reservieren Sie eine Feste Menge an RAM, die für eine Feste Anzahl von verbindungen (wegen der technischen Vorteile).
Als die meisten anderen Netzwerk-server-Anwendungen, MySQL reserviert eine Feste Anzahl von verbindungen zu. Jedes mal, wenn ein client sich verbindet, einen Schlitz in der connection pool wird zugeordnet. Jedes mal, wenn ein client die Verbindung trennt, einen slot bekommt als frei markiert.
Während Sie können vergrößern die pre-allocated connection pool, tun Sie dies in kleinen Schritten. Ihre Systemadministration (hoffentlich) hat sich entschieden, die Verbindungs-pool-Größe mit bedacht.
Wenn ein connection pool wird zu groß, Ihre Anwendung oder auch die ganze server - bekommen könnte, das nicht mehr reagiert: Jede EDV-Umgebung können nur Prozess eine bestimmte Anzahl von Anfragen pro Zeiteinheit. Die Anzahl hängt von der durchschnittlichen Kosten pro Antrag /die Verteilung der Kosten über Anforderungen.
Sobald Sie wissen, Sie könnten Sie ändern, MySQL max_connections Einstellung.
PHP und MySQL
Zuweisung
$db = null
ist in Ordnung hier erklärt.In Bezug auf Ihr problem-Szenario, Speicherplatz und Bandbreite, die wahrscheinlich nicht relevant sind.
Im Allgemeinen, Sie können sich darauf vorbereiten, eine Klasse-konforme,singleton-Muster, die die eine und einzige Schnittstelle zu sprechen, um Ihre Datenbank-server. Andere Muster anwendbar sein können, zu.
Alle anderen Scripte sollten require_once dieser classe die Datei, und führen Sie alle DB-bezogene Dinge mit dieser Klasse.
Korrekt implementiert und aufgerufen, die singleton-Klasse verwendet eine einzelne MySQL-Verbindung pro Anfrage verarbeitet.
Den richtigen Ort, um die Anzahl der verbindungen ist
my.cnf
, die oft in der/etc/
- Verzeichnis. Dort können Sie einen Wert wie so:Im Falle von Schwierigkeiten, SHOW processlist vielleicht helfen. Es liefert Informationen über alle aktiven verbindungen:
In eine top-level -
catch
- block für die BehandlungPDOException
können Sie das Ergebnis SHOW processlist in einer log-Datei für spätere Analyse. Aber dafür, dass die Menge solcher log-Einträge ist begrenzt pro Zeiteinheit, um nicht in der Flut deiner log-Datei.Beachten Sie, dass MySQL ermöglicht eine weitere Verbindung als max_connections für eine client-Verbindung von einem user, der SUPER-Privilegien.
Könnten Sie einen solchen Benutzer zu sammeln, die Prozess-Liste Informationen. Oder - im Falle einer
PDOException
- Sie verzögern könnte Ihre Anwendung für eine kurze Zeit und versuchen Sie erneut, die Verbindung herzustellen und dann speichern Sie die processlist.Unbegrenzten Speicherplatz
Etwas wie unbegrenzten Speicherplatz existiert nicht: Aufgrund der einfachen Tatsache, dass die Menge der Festplatten und SSDs, die jemals produziert wurden, ist eine endliche Zahl 😉
Während Ihr provider nicht eine Grenze festlegen, technische Grenzen existieren - , die sehr wahrscheinlich nicht wichtig in deinem Fall.
Praktisch, es gibt eine weitere Grenze: Schreiben und ausführen einer Anwendung weist mehr und mehr Speicherplatz. Innerhalb kürzester Zeit, Ihren provider, Ihnen den Vertrag...
InformationsquelleAutor SteAp