デバッグは、PHPアプリケーションの開発とMySQLデータベースとの対話の過程で不可欠なリンクです。特に、接続の問題を見つけたり、パフォーマンスの問題を照会したり、予期しないエラーを発見する場合、デバッグツールとログは特に重要です。一般的に言及されている2つのデバッグ方法は、mysqli :: debug()関数とmysql( general_logやslow_query_logなど)を有効にするローカルデバッグログを使用することです。開発者はデータベースの動作を理解するのに役立ちますが、目的、メカニズム、詳細度が異なります。
mysqli :: debug()は、php mysqli拡張機能によって提供される静的メソッドです。これにより、クライアントレベルのデバッグ関数を有効にして、PHPスクリプトとMySQLデータベース間の通信の詳細なプロセスを追跡できます。このデバッグ情報は、データベースサーバーではなく、クライアント(つまりPHPエンジン)によって生成されます。
<?php
// デバッグロギングを一時ファイルにオンにします
mysqli::debug("d:t:O,/tmp/client_trace.log");
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
echo "接続に失敗しました: " . $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();
?>
クライアントコールスタックを記録する:データベースへの各呼び出しの前後にPHPクライアントの動作を表示できます。
サーバーの構成は不要:サーバーの許可要件は低く、共有ホスティングなどの制限された環境に適しています。
接続の問題のデバッグに適しています:接続の失敗、認証障害など。
PHPクライアントの動作のみが記録され、MySQL内の実行の詳細を除く。
Mysqliを介して実行される操作のみを追跡でき、 PDOやMySqlndなどの他の操作は無効です。
MySQLサーバー自体は、データベースの操作を記録するためのログメカニズムも提供します。その中で、 general_logとslow_query_logは、最も一般的に使用される2つです。
general_log :実行されたすべてのSQLステートメントを記録します。
slow_query_log :実行時間が指定されたしきい値を超えるスロークエリを記録します。
-- 開ける general_log
SET global general_log = 1;
SET global general_log_file = '/var/log/mysql/general.log';
-- 開ける慢查询日志
SET global slow_query_log = 1;
SET global slow_query_log_file = '/var/log/mysql/slow.log';
SET global long_query_time = 2; -- レコード実行が超えます 2 2番目のステートメント
記録詳細なSQL実行履歴:クエリの動作の分析と無効なクエリの識別に適しています。
データベースのパフォーマンスの最適化を支援します。ボトルネックは、遅いクエリログで識別できます。
PT-Query-Digest、MySQLワークベンチなど、パフォーマンス分析ツールと統合できます。
データベース管理者の権限が必要です。
特にgeneral_logがオンになっている場合、パフォーマンスに影響を与える可能性があります。
機能/ツール | mysqli :: debug() | MySQLローカルデバッグログ |
---|---|---|
位置 | PHPクライアント | MySQLサーバー側 |
記録可能なコンテンツ | クライアント関数呼び出し、接続の詳細 | すべてのSQLステートメント実行レコード、スロークエリ |
許可要件を有効にします | 低い | 高(サーバーの許可が必要) |
パフォーマンスの影響 | 非常に低い | 中から高(ログタイプに応じて) |
推奨される使用シナリオ | PHPサイドのデバッグと開発環境 | データベースのパフォーマンス分析、生産環境ログトラッキング |
MySqli :: Debug()は、PHPアプリケーション開発のデバッグフェーズにより適しており、データベース接続の問題の問題やクライアントの動作の理解に特に役立ちます。 MySQLのローカルデバッグログは、サーバー側のSQL実行の詳細にもっと注意を払います。これは、データベースのパフォーマンスを最適化し、問題の根本原因を見つけるために特に重要です。
理想的なアプローチは、2つを組み合わせて使用することです。MySqli :: debug()を使用して、ローカル開発中にコールプロセスをキャプチャし、テストまたは生産環境でMySQLを有効にするログシステムで詳細な分析を実施します。これにより、クライアントからサーバーへの完全なデバッグチェーンを形成し、問題のあるポジショニングの効率を大幅に改善できます。