현재 위치: > 최신 기사 목록> mysqli :: dump_debug_info 함수는 MySQL의 디버깅 모드와 함께 사용하여 최대 효과를 달성합니까?

mysqli :: dump_debug_info 함수는 MySQL의 디버깅 모드와 함께 사용하여 최대 효과를 달성합니까?

gitbox 2025-06-22
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 이 문서는 논의하는 것을 목표로합니다 PHP 가운데 mysqli::dump_debug_info 기능 및 MySQL 디버그 모드를 사용하기위한 모범 사례。</span></span><span>
</span><span><span class="hljs-comment">// 이 섹션을 수정할 필요가 없습니다,기사 포지셔닝 및 테스트 용。</span></span><span>

</span><span><span class="hljs-comment">// 데이터베이스 연결을 설정합니다(예제 만)</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">// 연결이 성공했는지 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"연결이 실패했습니다: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 사용 dump_debug_info 예</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
&lt;hr&gt;
</span></span>

매일 개발에서 PHP 프로그램과 MySQL 간의 상호 작용은 종종 많은 동시성, 복잡한 쿼리 또는 설명 할 수없는 성능 병목 현상을 다룰 때 많은 디버깅 정보를 숨 깁니다. mysqli :: dump_debug_info () 는 비교적 인기가 없지만 매우 유용한 디버깅 기능으로 PHP 레벨의 연결 상태 정보를 MySQL 서버로 전달하는 데 도움이 될 수 있습니다. 그러나이 기능 만 부르는 것은 종종 그 효과를 관찰하기가 어렵고 MySQL의 디버그 모드와 함께 사용될 때만 실제로 역할을 할 수 있습니다.

1. 기능 소개

mysqli :: dump_debug_info () 는 PHP의 MySQLI 클래스의 메소드입니다. 그 기능은 디버그 정보 요청을 MySQL 서버로 보내는 것입니다. 기능 정의는 다음과 같습니다.

 <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>

이 기능을 호출 한 후 MySQL 서버는 디버깅 기능이 서버에서 활성화 된 경우 로그 파일에 대한 현재 연결의 디버그 정보를 작성합니다.

2. MySQL 디버깅 모드를 활성화합니다

DUMP_DEBUG_INFO ()가 작동하려면 먼저 MySQL 서버 측에서 디버깅을 활성화해야합니다. 이 방법은 다음과 같습니다.

  1. 구성 파일 편집 <br> my.cnf 또는 my.ini 파일을 열고 다음 줄을 추가하십시오 (시스템 경로에 따라 조정하십시오) :

     <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>

    더 세밀한 디버깅이 필요한 경우 -debug 매개 변수로 MySQL을 시작할 수 있습니다.

     <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>
  2. MySQL 서비스를 다시 시작하십시오

     <span><span>sudo systemctl restart mysql
    </span></span>
  3. 로그 경로 권한을 확인하십시오 <br> MySQL이 로그 파일, 특히 /tmp 또는 /var/log/mysql/ 에 쓸 수있는 권한이 있는지 확인하십시오.

3. 결합 된 사용 시나리오

다음은 DUMP_DEBUG_INFO () 와 함께 문제를 디버깅하는 방법을 보여주는 실용적인 사용 시나리오입니다.

1. 위치 연결 상태 문제

실행 후 일부 연결이 올바르게 닫히거나 해제되지 않았다고 의심하면 일련의 데이터베이스 작업을 수행 한 후에 전화 할 수 있습니다.

 <span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</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>-&gt;</span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>();
</span></span>

현재 MySQL 로그는 연결의 내부 상태를 기록하여 리소스 누출과 같은 문제를 분석하는 데 도움이됩니다.

2. 장기 실행 스크립트 디버그

배치 업데이트 또는 데이터 청소 스크립트를 실행할 때 DUMP_DEBUG_INFO ()는 각 단계에서 한 번 호출하여 서버 측의 현재 연결 실행 경로를 추적합니다. 예를 들어:

 <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>-&gt;</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>-&gt;</span><span><span class="hljs-title function_ invoke__">dump_debug_info</span></span><span>(); </span><span><span class="hljs-comment">// 디버그 정보가 업데이트 될 때마다 쓰기</span></span><span>
}
</span></span>

3. 느린 쿼리 로그 분석과 조정하십시오

slow query 로그가 활성화 된 경우 dump_debug_info () 의 타임 스탬프와 결합되면 느린 쿼리를 트리거 한 코드를 찾을 수 있습니다.

4. 주목할만한 것들

  • 덤프 _debug_info () 호출해도 PHP 측의 데이터를 반환하지 않으며 예외가 발생하지 않습니다. 디버깅 정보는 MySQL 로그에 완전히 반영됩니다.

  • I/O 부담이 증가하기 때문에 생산 환경 에서이 기능을 자주 사용하는 것이 좋습니다.

  • mysqli_debug () 함수와 달리 dump_debug_info ()는 글로벌 디버깅 매개 변수를 구성하는 대신 현재 연결 상태의 런타임 스냅 샷입니다.

V. 결론

mysqli :: dump_debug_info ()는 대부분의 프로젝트에서 일반적이지 않지만 문제를 해결하기 위해 DBA 또는 서버 계층과 긴밀히 협력 해야하는 경우 필수적인 도구입니다. MySQL의 디버그 로그를 합리적으로 구성하고 중요한 위치 에서이 기능을 호출함으로써 개발자는 PHP와 데이터베이스 간의 대화식 동작을 더 잘 관찰하고 최적화하여 궁극적으로 시스템의 안정성과 성능을 향상시킬 수 있습니다.