Print
카테고리: [ MariaDB ]
조회수: 3069

mysql / mariadb 에서 signal 11로 db가 down 되면 운이 좋으면 지난 번 글의 tmp query 와 같이 원인을 파악하기 쉬운 경우도 있지만

대부분 원인파악이 힘들게 로그가 떨어집니다. 

이번 글에서는 에러로그만으로는 원인을 찾기가 힘들 때 gdb를 이용하여 디버깅해서 원인을 찾아보겠습니다.

 

 

-1.  db error log

 
Thread pointer: 0x7f5993f16008

Attempting backtrace. You can use the following information to find out

where mysqld died. If you see no messages after this, something went

terribly wrong...

stack_bottom = 0x7f5af40861d8 thread_stack 0x48400

/TEST/mysql/bin/mysqld(my_print_stacktrace+0x2e)[0xc0e47e]

/TEST/mysql/bin/mysqld(handle_fatal_signal+0x4bf)[0x769e9f]

/lib64/libpthread.so.0[0x3a14e0f7e0]

/TEST/mysql/bin/mysqld(_Z13rr_unlock_rowP13st_join_table+0xb)[0x5da02b]

/TEST/mysql/bin/mysqld[0x5f2004]

/TEST/mysql/bin/mysqld(_Z10sub_selectP4JOINP13st_join_tableb+0x138)[0x5f22e8]

/TEST/mysql/bin/mysqld[0x5f93ed]

/TEST/mysql/bin/mysqld(_ZN4JOIN10exec_innerEv+0xe5e)[0x60a75e].

.

.

.

 

=> ERROR 관련하여 스택이 나오지만 관련 함수를 보려면 어떤 파일을 참조해야하는지 등이 나오지 않음 

 

-2. my.cnf 설정 추가

[mysqld]
stack-trace
core-file
 
=> my.cnf 에 위 설정을 추가하면 db의 datadir 영역에 core dump 가 떨어짐
* 코어덤프 파일의 사이즈가 생각보다 클 수 있으니 주의

 

 

-.3 gdb backtrace 

 

# gdb /TEST/mysql/bin/mysqld core.12935
=> 위에서 떨어진 코어덤프 파일을 gdb 디버깅툴로 실행
 
(gdb) bt full

#0  0x0000003a14e0c97c in pthread_kill () from /lib64/libpthread.so.0

No symbol table info available.

#1  0x0000000000769dcc in handle_fatal_signal (sig=11) at /home/buildbot/buildbot/build/sql/signal_handler.cc:296

        curr_time = 1545139731

        tm = {tm_sec = 51, tm_min = 28, tm_hour = 22, tm_mday = 18, tm_mon = 11, tm_year = 118, tm_wday = 2, tm_yday = 351, tm_isdst = 0,

          tm_gmtoff = 32400, tm_zone = 0x7f0633c3b070 "KST"}

        thd = 0x7f04f4f17008

        print_invalid_query_pointer = false

#2  <signal handler called>

No symbol table info available.

#3  rr_unlock_row (tab=0x7f04d7138cc0) at /home/buildbot/buildbot/build/sql/sql_select.cc:10509

No locals.

#4  0x00000000005f2004 in evaluate_join_record (join=0x7f04d70620a8, join_tab=0x7f04d7138cc0, error=0)

    at /home/buildbot/buildbot/build/sql/sql_select.cc:18591

        shortcut_for_distinct = false

        found_records = 0

        select_cond = 0x7f04d7139468

#5  0x00000000005f22e8 in sub_select (join=0x7f04d70620a8, join_tab=0x7f04d7138cc0, end_of_records=<value optimized out>)

    at /home/buildbot/buildbot/build/sql/sql_select.cc:18333

        error = 0

        rc = <value optimized out>

        info = 0x7f04d7138d80

        skip_over = <value optimized out>

.

.

.
 
 
=> error 스택이 참조가능한 파일과 라인과 함께 출력되어 원인파악이 더 용이함