Debugging ist ein unverzichtbarer Link im Prozess der Entwicklung von PHP -Anwendungen und der Interaktion mit MySQL -Datenbanken. Debugging -Tools und -protokolle sind besonders wichtig, insbesondere bei der Lokalisierung von Verbindungsproblemen, Abfragen von Leistungsproblemen oder unerwarteten Fehlern. Zwei häufig erwähnte Debugging -Methoden verwenden die MySQLI :: Debug () -Funktion und lokale Debug -Protokolle, die MySQL (wie General_log und Slow_query_log ) ermöglichen. Obwohl sie Entwicklern helfen können, den Betrieb der Datenbank zu verstehen, variieren sie in ihrem Zweck, ihrem Mechanismus und ihrem Detailgrad.
Mysqli :: debug () ist eine statische Methode, die von der PHP MySQLI -Erweiterung bereitgestellt wird. Sie ermöglichen es Ihnen, Debugging-Funktionen auf Client-Ebene zu ermöglichen, um den detaillierten Kommunikationsprozess zwischen PHP-Skripten und MySQL-Datenbanken zu verfolgen. Diese Debugging -Informationen werden vom Client (d. H. Die PHP -Engine) generiert, nicht vom Datenbankserver.
<?php
// Schalten Sie die Debug -Protokollierung in temporäre Dateien ein
mysqli::debug("d:t:O,/tmp/client_trace.log");
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error;
exit();
}
$result = $mysqli->query("SELECT * FROM users WHERE email LIKE '%@m66.net%'");
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$mysqli->close();
?>
Client Call Stack aufzeichnen : Sie können das Verhalten von PHP -Clients vor und nach jedem Anruf in der Datenbank anzeigen.
Keine Serverkonfiguration erforderlich : Die Anforderungen an die Serverberechtigte sind gering und für eingeschränkte Umgebungen wie das gemeinsame Hosting geeignet.
Geeignet zum Debuggen von Verbindungsproblemen : wie erfolglose Verbindung, Authentifizierungsfehler usw.
Nur das Verhalten des PHP -Clients wird aufgezeichnet, ohne Ausführungsdetails in MySQL.
Nur Operationen, die über MySQLI ausgeführt werden, können verfolgt werden, andere wie PDO oder MySQLND sind ungültig.
Der MySQL -Server selbst bietet auch einen Protokollierungsmechanismus, um den Betrieb der Datenbank aufzuzeichnen. Unter ihnen sind General_log und Slow_query_log die beiden am häufigsten verwendeten:
General_log : Aufzeichnet alle ausgeführten SQL -Anweisungen.
Slow_query_log : Aufzeichnungen langsame Abfragen, deren Ausführungszeit den angegebenen Schwellenwert überschreitet.
-- Offen general_log
SET global general_log = 1;
SET global general_log_file = '/var/log/mysql/general.log';
-- Offen慢查询日志
SET global slow_query_log = 1;
SET global slow_query_log_file = '/var/log/mysql/slow.log';
SET global long_query_time = 2; -- Datensatzausführung überschreitet 2 Zweite Aussage
Detaillierte SQL -Ausführungshistorie aufzeichnen : Geeignet zur Analyse von Abfragenverhalten und Identifizierung ungültiger Abfragen.
Hilft bei der Optimierung der Datenbankleistung : Engpässe können durch langsame Abfrageprotokolle identifiziert werden.
Kann in Tools für Leistungsanalyse integriert werden : wie PT-Query-Digest, MySQL Workbench.
Datenbankadministratorberechtigungen sind erforderlich.
Kann die Leistung beeinflussen, insbesondere wenn General_log eingeschaltet ist.
Funktionen/Werkzeuge | Mysqli :: Debug () | MySQL Lokales Debug -Protokoll |
---|---|---|
Standort | PHP -Client | MySQL Server -Seite |
Aufzeichnungsinhalte | Client -Funktionsaufrufe, Verbindungsdetails | Alle SQL -Anweisungsausführungsdatensätze, langsame Abfrage |
Ermöglichen Sie die Berechtigungsanforderungen | Niedrig | Hoch (Serverberechtigung erforderlich) |
Leistungsauswirkungen | Extrem niedrig | Mittel bis hoch (abhängig vom Protokolltyp) |
Empfohlene Nutzungsszenarien | PHP -Nebendebugging und Entwicklungsumgebung | Datenbankleistungsanalyse, Produktionsumgebungsprotokollverfolgung |
MySQLI :: Debug () eignet sich besser für die Debugging -Phase der PHP -Anwendungsentwicklung und ist besonders hilfreich, wenn Datenbankverbindungsprobleme oder das Verhalten des Kunden verstehen. Die lokalen Debug-Protokolle von MySQL achten mehr auf die serverseitigen SQL-Ausführungsdetails, die besonders wichtig sind, um die Datenbankleistung zu optimieren und die Hauptursache für Probleme zu finden.
Der ideale Ansatz besteht darin, die beiden in Kombination zu verwenden: Verwenden Sie MySQLI :: Debug (), um den Anrufprozess während der lokalen Entwicklung zu erfassen und eine eingehende Analyse des Protokollsystems durchzuführen, die MySQL in einer Test- oder Produktionsumgebung ermöglicht. Dies kann eine vollständige Debugging -Kette vom Client zum Server bilden und die Effizienz der Problempositionierung erheblich verbessern.