<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Dieses Dokument zielt darauf ab zu diskutieren PHP Mitte mysqli::dump_debug_info Funktionen und MySQL Best Practices für die Verwendung des Debug -Modus mit。</span></span><span>
</span><span><span class="hljs-comment">// Sie müssen diesen Abschnitt nicht ändern,Nur für Artikel -Positionierung und -Testing。</span></span><span>
</span><span><span class="hljs-comment">// Datenbankverbindung einrichten(Beispiele nur)</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-comment">// Stellen Sie sicher, dass die Verbindung erfolgreich ist</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// verwenden dump_debug_info Beispiel</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span></span>
In der täglichen Entwicklung verbirgt die Interaktion zwischen PHP -Programmen und MySQL häufig viele Debugging -Informationen, insbesondere wenn es um hohe Parallelität, komplexe Abfragen oder unerklärliche Leistungsgpässe zu tun hat. MySQLI :: DUPP_DEBUG_INFO () ist eine relativ unpopuläre, aber sehr nützliche Debugging -Funktion, die uns helfen kann, Verbindungsstatusinformationen auf PHP -Ebene an den MySQL -Server zu übergeben. Es ist jedoch oft schwierig, diese Funktion allein zu bezeichnen, um ihre Wirkung zu beobachten, und sie kann nur ihre Rolle spielen, wenn sie in Verbindung mit dem Debug -Modus von MySQL verwendet wird.
Mysqli :: Dump_debug_info () ist eine Methode in der MySQLI -Klasse von PHP. Seine Funktion besteht darin, Debug -Informationsanforderungen an den MySQL -Server zu senden. Seine Funktionsdefinition lautet wie folgt:
<span><span><span class="hljs-keyword">bool</span></span><span> mysqli::</span><span><span class="hljs-variable constant_">dump_debug_info</span></span><span> ( </span><span><span class="hljs-keyword">void</span></span><span> )
</span></span>
Nach dem Aufrufen dieser Funktion schreibt der MySQL -Server die Debug -Informationen der aktuellen Verbindung zu seiner Protokolldatei, vorausgesetzt, die Debugging -Funktion wird vom Server aktiviert.
Um Dump_debug_info () zum Arbeiten zu bringen, müssen Sie zunächst das Debuggen auf der MySQL -Serverseite aktivieren. Die Methode lautet wie folgt:
Konfigurationsdatei bearbeiten <br> Öffnen Sie die Datei my.cnf oder my.ini und fügen Sie die folgenden Zeilen hinzu (bitte an Ihren Systempfad anpassen):
<span><span><span class="hljs-section">[mysqld]</span></span><span>
</span><span><span class="hljs-attr">log_output</span></span><span>=FILE
</span><span><span class="hljs-attr">general_log</span></span><span>=</span><span><span class="hljs-number">1</span></span><span>
</span><span><span class="hljs-attr">general_log_file</span></span><span>=/var/log/mysql/general.log
</span></span>
Wenn ein feinkörniger Debugging erforderlich ist, können Sie MySQL mit dem Parameter-Debug- Parameter beispielsweise starten:
<span><span><span class="hljs-attribute">mysqld</span></span><span> --</span><span><span class="hljs-literal">debug</span></span><span>=d:t:i:o,/tmp/mysql_debug.log
</span></span>
Starten Sie den MySQL -Service neu
<span><span>sudo systemctl restart mysql
</span></span>
Überprüfen Sie die Log Path -Berechtigungen <br> Stellen Sie sicher, dass MySQL die Erlaubnis hat, in Protokolldateien zu schreiben, insbesondere unter /tmp oder /var/log/mysql/ .
Hier sind einige praktische Nutzungsszenarien, die zeigen, wie Probleme in Kombination mit DUIL DIGP_DEBUG_INFO () debuggen:
Wenn Sie vermuten, dass einige Verbindungen nach der Ausführung nicht ordnungsgemäß geschlossen oder befreit sind, können Sie sie nach der Ausführung einer Reihe von Datenbankvorgängen anrufen:
<span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE id = 1"</span></span><span>);
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span></span>
Zu diesem Zeitpunkt erfasst das MySQL -Protokoll den internen Status der Verbindung, wodurch Probleme wie Ressourcenleckage analysiert werden.
Beim Ausführen eines Stapel -Update- oder Datenreinigungsskripts wird in jeder Phase DUPP_DEBUG_INFO () einmal aufgerufen, um den aktuellen Verbindungsausführungspfad auf der Serverseite zu verfolgen. Zum Beispiel:
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$userIds</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$id</span></span><span>) {
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"UPDATE users SET status = 'active' WHERE id = <span class="hljs-subst">$id</span></span></span><span>");
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>(); </span><span><span class="hljs-comment">// Schreiben Sie jedes Mal, wenn sie aktualisiert werden</span></span><span>
}
</span></span>
Wenn das langsame Abfrageprotokoll in Kombination mit dem Zeitstempel von DUPP_DEBUG_INFO () in Verbindung gebracht wird, können Sie feststellen, welches Code -Stück die langsame Abfrage ausgelöst hat.
Das Aufrufen von DUPP_DEBUG_INFO () gibt keine Daten auf der PHP -Seite zurück, noch wird eine Ausnahme ausgelöst. Die Debugging -Informationen spiegeln sich im MySQL -Protokoll vollständig wider.
Es wird nicht empfohlen, diese Funktion in Produktionsumgebungen häufig zu verwenden, da sie die E/A -Belastung erhöht.
Im Gegensatz zur Funktion von MySQLI_Debug () ist DUIL DUPP_DEBUG_INFO () ein Laufzeit -Schnappschuss des Status der aktuellen Verbindung, anstatt globale Debugging -Parameter zu konfigurieren.
Obwohl MySQLI :: DUPP_DEBUG_INFO () in den meisten Projekten nicht üblich ist, ist es ein unverzichtbares Tool, wenn es eng mit der DBA- oder Serverschicht zusammenarbeiten muss, um Probleme zu beheben. Durch rationales Konfigurieren des Debug -Protokolls von MySQL und das Aufrufen dieser Funktion an einem kritischen Ort können Entwickler das interaktive Verhalten zwischen PHP und der Datenbank besser beobachten und optimieren, wodurch letztendlich die Stabilität und Leistung des Systems verbessert wird.