GA

2024/03/08

Rocky Linux 8とMySQLでcoreファイルが見つからない

TL;DR


—core-fileulimit -c unlimited も設定してるのにcoredumpが見つからない…と思ったら変わっていたらしい。


$ less /usr/mysql/8.0.36/data/error.log

..

2024-03-08T07:36:23Z UTC - mysqld got signal 11 ;

<secret>
/usr/mysql/8.0.36/bin/mysqld(do_command(THD*)+0x15b) [0xde00bb]
/usr/mysql/8.0.36/bin/mysqld() [0xf391b8]
/usr/mysql/8.0.36/bin/mysqld() [0x2576814]
/lib64/libpthread.so.0(+0x81da) [0x7fa868e941da]
/lib64/libc.so.6(clone+0x43) [0x7fa867236e73]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7fa80438de80): SHOW CREATE TABLE sys.metrics
Connection ID (thread ID): 14
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
Writing a core file

Writing a core file と言ってるくせに、datadirにない。

$ ll /usr/mysql/8.0.36/data/core*
ls: cannot access '/usr/mysql/8.0.36/data/core*': No such file or directory

journalctl を見たらなんかスタックトレース ( gdbthread apply all bt と同じように全スレッドぶん) が載ってる…こんなの前にはなかったはず…そして俺はスタックトレースじゃなくてcoreファイルが欲しいんだ…!

$ sudo journalctl --since=today | less
..
Mar 08 07:36:45 yoku0825-sandbox systemd-coredump[2500410]: Process 2453404 (mysqld) of user 1001 dumped core.

                                                            Stack trace of thread 2453453:
                                                            #0  0x00007fa868e9ba85 pthread_kill (libpthread.so.0)
                                                            #1  0x0000000000f4913c handle_fatal_signal (mysqld)
                                                            #2  0x00007fa868e9ed40 __restore_rt (libpthread.so.0)
..

と思ってググったらあっという間に冒頭のブログに出会った。

systemd-coredump環境で暮らす - 赤帽エンジニアブログ

$ sudo coredumpctl list
TIME                            PID   UID   GID SIG COREFILE  EXE
Thu 2024-03-07 02:41:14 GMT  2433147  1001  1001  11 present   /usr/mysql/8.0.36/bin/mysqld
Thu 2024-03-07 04:00:05 GMT  2441380  1001  1001   5 present   /usr/mysql/8.0.36/bin/mysqld
Fri 2024-03-08 07:36:45 GMT  2453404  1001  1001  11 present   /usr/mysql/8.0.36/bin/mysqld

coredumpctl dump .. でスタックトレースが出て「違う、俺はコアファイルが欲しいんだ」って気になったけど特に気にしなくて良くてちゃんとoutputに出力されてた。

$ sudo coredumpctl dump -1 --output ./core.2433147
           PID: 2453404 (mysqld)
           UID: 1001 (yoku0825)
           GID: 1001 (yoku0825)
        Signal: 11 (SEGV)
     Timestamp: Fri 2024-03-08 07:36:23 GMT (50min ago)
  Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_native_password --mysqlx=off --early-plugin-load=keyring_file.so --default-time-zone=+00:00 --loose-rpl-semi-sync-source-enabled=ON --loose-innodb-ddl-threads=1 --log-error=error.log --pid-file=/usr/mysql/8.0.36/data/mysql.pid --socket=/usr/mysql/8.0.36/data/mysql.sock --port=64080
    Executable: /usr/mysql/8.0.36/bin/mysqld
 Control Group: /
         Slice: -.slice
       Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
    Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
      Hostname: yoku0825-sandbox
       Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4
       Message: Process 2453404 (mysqld) of user 1001 dumped core.

..

dumpで吐き出させたあとはいつも通りgdbで見られる。 coredumpctl debug -1 でも良さそう(sudo噛ませると .gdbinit 読んでくれなくてちょっと見づらい)

$ gdb ../bin/mysqld core.2433147
or
$ sudo coredumpctl debug -1
           PID: 2453404 (mysqld)
           UID: 1001 (yoku0825)
           GID: 1001 (yoku0825)
        Signal: 11 (SEGV)
     Timestamp: Fri 2024-03-08 07:36:23 GMT (53min ago)
  Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_native_password --mysqlx=off --early-plugin-load=keyring_file.so --default-time-zone=+00:00 --loose-rpl-semi-sync-source-enabled=ON --loose-innodb-ddl-threads=1 --log-error=error.log --pid-file=/usr/mysql/8.0.36/data/mysql.pid --socket=/usr/mysql/8.0.36/data/mysql.sock --port=64080
    Executable: /usr/mysql/8.0.36/bin/mysqld
 Control Group: /
         Slice: -.slice
       Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
    Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
      Hostname: yoku0825-sandbox
       Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4
       Message: Process 2453404 (mysqld) of user 1001 dumped core.

..
### これもしばらくスタックトレース吐いたあと止まるけどそのうちgdbが始まる

coredumpctl infoだと圧縮されたコアファイルのパスも吐いてくれるので、lz4catとかでもなんとかなった

$ sudo coredumpctl info -1
           PID: 2453404 (mysqld)
           UID: 1001 (yoku0825)
           GID: 1001 (yoku0825)
        Signal: 11 (SEGV)
     Timestamp: Fri 2024-03-08 07:36:23 GMT (54min ago)
  Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_na>
    Executable: /usr/mysql/8.0.36/bin/mysqld
 Control Group: /
         Slice: -.slice
       Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
    Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
      Hostname: yoku0825-sandbox
       Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4         <----- ここ
       Message: Process 2453404 (mysqld) of user 1001 dumped core.

..

abrtd にコアファイルを消し去られる事案があってそれかなあと思っていたら RHEL8では非推奨 になっていたんですね。

OSが変わったことを感じる…。

0 件のコメント :

コメントを投稿