How to crash mysqld intentionally

While some may think I’m daft, I have a legitimate reason for wanting to crash mysqld. However first we need to find a way to crash it.

Great thanks to Alan K, Mark L, Harrison and Hartmut on #mysql-dev for several suggestions and a config option I was unaware of. My investigation even lead to a documentation bug logged as #51739.

My first thought was to find a known bug and if necessary install the correct version to test that. A good one was suggested, Bug #48508 which fails on several versions that I will use to demonstrate with, however the simplest way is to issue kill -11

By default, no core file will be produced which is what I’m seeking but with the right options this is possible. First, the user running mysqld probably has a core file limit size of 0.

$ ulimit -c
0

You can fix this with with ulimit or you can specify this in the [mysqld_safe] section with core-file-size=unlimited

$ ulimit -c unlimited
$ ulimit -c
unlimited

The option I was not aware of is you also have to also specify core-file in your my.cnf

[mysqld]
core-file

I also for my CentOS 5.4 installation ran the following kernel commands, but this may be unnecessary.

sudo /sbin/sysctl -w kernel.core_pattern="core"
sudo /sbin/sysctl -w fs.suid_dumpable= 1

It is now easy to produce a core file.

$ bin/mysqld_safe &
$ killall -11 mysqld
$ bin/mysqld_safe: line 137:  2656 Segmentation fault      (core dumped) ...
100304 16:46:43 mysqld_safe Number of processes running now: 0
100304 16:46:43 mysqld_safe mysqld restarted
$ find . -name "core*"
./data/core.99999

NOTE: Do no run killall on a multi-instance server. I use this syntax here only for simplicity in presentation. It is best to run ps and kill the appropriate pid.

On a side note, I also tried to produce a core on Mac OS X without success. I’d still like to document that way, so if anybody can assist please ping me.

Tags: , , ,

3 Responses to “How to crash mysqld intentionally”

  1. Nick Westerlund says:

    on OS X, it is quite easy.

    1) make sure core-file is enabled in my.cnf
    2) check ulimit
    3) kill mysql
    4) check for the file in /cores

    Example:

    taxbiex:bin nick$ cat my
    [mysqld]
    core-file
    taxbiex:bin nick$ ulimit
    unlimited
    taxbiex:bin nick$ ulimit -c
    0
    taxbiex:bin nick$ ./mysqld_safe –defaults-file=my &
    [1] 31444
    taxbiex:bin nick$ ps x | grep mysqld
    31444 s005 S 0:00.02 /bin/sh ./mysqld_safe –defaults-file=my
    31491 s005 S 0:00.06 /usr/local/mysql/bin/mysqld –defaults-file=my –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data –user=mysql –log-error=/usr/local/mysql/data/taxbiex.local.err –pid-file=/usr/local/mysql/data/taxbiex.local.pid
    31493 s005 R+ 0:00.00 grep mysqld
    taxbiex:bin nick$ kill -11 31491
    taxbiex:bin nick$ ls /cores
    core.31491

    And there you have it, a core on OS X 10.6.2

  2. [...] correctly configured, mysqld will generate a core file (See How to crash mysqld intentionally for background information on required [...]

  3. Terrum says:

    Awesome this! How about marking a table as crashed intentionally? I want to intentionally mark a table as crashed. How do I do this? Thanks.