• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 1. MySQL 내부 사양
    2. MySQL 플러그인 API
    3. 플러그인을 위한 MySQL서비스
    4. MySQL에 새로운 함수 추가
    5. MySQL 디버그 및 이식
    1. MySQL 서버 디버깅
    1. 디버깅을 위해 MySQL 컴파일
    2. 추적 파일 생성
    3. pdb를 사용하여 Windows 크래시 덤프 만들기
    4. gdb에서 mysqld 디버그
    5. Stack Trace 사용
    6. mysqld에서 오류의 원인을 찾기 위해 서버 로그 사용
    7. 테이블이 손상된 경우 테스트 케이스 작성
    2. MySQL 클라이언트 디버깅
    3. DBUG 패키지
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

24.5.1.4 gdb에서 mysqld 디버그

대부분의 시스템에서는 mysqld가 충돌 한 경우에 자세한 정보를 얻기 위해, gdb에서도 mysqld를 시작할 수 있습니다.

Linux의 일부 오래된 gdb 버전에서는 mysqld 스레드를 디버깅 할 수 있도록하려면 run --one-thread 를 사용해야합니다. 이 경우 한 번에 활성화 할 수있는 것은 하나의 스레드 만입니다. 스레드 디버깅은 gdb 5.1 쪽이 더 잘 작동하기 때문에이 버전으로 업그레이드하면 최적입니다.

gdb에서 mysqld를 실행하면 NPTL 스레드 (Linux의 새로운 스레드 라이브러리)로 인한 문제가 발생할 수 있습니다. 

다음과 같은 현상이 발생합니다.

  • mysqld가 hangs during startup (ready for connections이 출력되기 전)

  • mysqld가 pthread_mutex_lock() 또는 pthread_mutex_unlock() 를 호출하는 동안 충돌한다.

이 경우 gdb를 시작하기 전에 셸에서 다음 환경 변수를 설정하십시오.

LD_ASSUME_KERNEL=2.4.1
export LD_ASSUME_KERNEL

gdb에서 mysqld를 실행할 때, --skip-stack-trace 를 사용하여 스택 추적을 해제하고 gdb에서 세그먼트 오류를 포착 할 수 있도록해야합니다.

MySQL 4.0.14 이후에서는 mysqld에 --gdb 옵션을 사용하십시오. 그러면 SIGINT 에 대한 인터럽트 핸들러 (mysqld를 ^C 로 정지하고 중단 점을 설정하기 위해 필요합니다)가 설치되어 스택 트레이스와 코어 파일 처리가 무효가됩니다.

새 연결이 항상 다수 발생하면 gdb는 오래된 스레드의 메모리를 해제하지 않기 때문에 gdb에서 MySQL을 디버깅하는 것은 매우 어렵습니다. 이 문제를 해결하려면 thread_cache_size 를 max_connections + 1으로 동일하게 설정하고 mysqld를 시작합니다. 대부분의 경우 --thread_cache_size=5' 를 사용하는 것만으로도 상당히 개선됩니다.

SIGSEGV 시그널이 발생 mysqld가 비정상적으로 종료 할 때 Linux 코어 덤프를 취득하는 경우, --core-file 옵션을 지정해 mysqld를 시작합니다. 이 코어 파일은 mysqld가 비정상적으로 종료 된 이유를 찾기 위해 도움이 될 수있는 백 트레이스를 만드는 데 사용할 수 있습니다.

shell> gdb mysqld core
gdb>   backtrace full
gdb>   quit

섹션 B.5.4.2 "MySQL이 계속 충돌하는 경우의 대처 방법" 을 참조하십시오.

Linux에서 gdb 4.17.x 이상을 사용하는 경우 다음의 정보를 가진 .gdb 파일을 현재 디렉토리에 설치하십시오.

set print sevenbit off
handle SIGUSR1 nostop noprint
handle SIGUSR2 nostop noprint
handle SIGWAITING nostop noprint
handle SIGLWP nostop noprint
handle SIGPIPE nostop
handle SIGALRM nostop
handle SIGHUP nostop
handle SIGTERM nostop noprint

gdb를 사용한 스레드 디버깅에 문제가있는 경우, gdb 5.x를 다운로드하고이를 대신 시도하십시오. 새로운 버전의 gdb는 스레드 처리가 매우 개선되고 있습니다.

mysqld을 디버그하는 방법의 예를 보여줍니다.

shell> gdb /usr/local/libexec/mysqld
gdb> run
...
backtrace full # Do this when mysqld crashes

위의 출력을 버그 리포트에 포함 섹션 1.7 "질문이나 버그를보고하는 방법" 의 단계를 사용하여 버그 보고서를 제출할 수 있습니다.

mysqld가 중단 된 경우에는 strace / /usr/proc/bin/pstack 와 같은 시스템 도구를 사용하여 mysqld가 중단 된 장소를 조사 할 수 있습니다.

strace /tmp/log libexec/mysqld

Perl의 DBI 인터페이스를 사용하는 경우, trace 메소드를 사용하거나 DBI_TRACE 환경 변수를 설정하여 디버깅 정보를 설정할 수 있습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved