5.9.1.4 在gdb下调试mysqld

如果mysqld崩溃(crash),在大多系统下你也可以从gdb启动mysqld来获取更多信息。
linix上一些较老的gdb版本,如果你想能调试mysqld线程,你必须使用run --one-thread。这种情况下,一次只能激活一个线程。
在gdb下运行mysqld时,NTPL线程(linix上的new thread library)可能会有一些问题。一些如下:
 在启动期间mysqld hang了(在为连接做好准备之前)。
 在pthread_mutex_lock或pthread_mutex_unlock调用期间mysqld crash了。
这种情况下,你应该在启动mysqld之前在shell中设置如下环境变量:
在这里插入图片描述

当在gdb下运行mysqld时,您应该使用–skip-stack-trace禁用堆栈跟踪,以便能够捕获gdb中的段错误。
使用–gdb选项来使mysqld为SIGINT(需要使用^ C停止mysqld来设置断点)安装一个中断处理器和禁用堆栈跟踪和core文件处理。
如果您一直进行大量新连接,则很难在gdb下调试MySQL,因为gdb不会为旧线程释放内存。你可以把thread_cache_size设为max_connextions+1来启动mysqld以避免这个问题。大多情况下,使用–thread_cache_size=5会很有帮助。
如果要在Linux上通过SIGSEGV信号得到mysqld的core dump,可以使用–core-file选项启动mysqld。这个core文件可用于回溯,来帮你找出mysqld挂掉的原因:
在这里插入图片描述

参见B.3.3.3节,”如果mysql持续崩溃该怎么做”
如果你正在linux上使用gdb,你应该在你的当前目录,使用以下信息,安装一个.gdb文件
在这里插入图片描述

这是一个如果调试mysqld的例子:
在这里插入图片描述

将先前的输出放在错误报告中,您可以使用第1.6节“如何报告错误或问题”中的说明进行归档。
如果mysql hang了,你可以尝试使用一些系统工具如strace或/usr/proc/bin/pstack来检查mysqld是否hang了
在这里插入图片描述

如果使用的是Perl DBI接口,则可以通过使用trace方法或设置DBI_TRACE环境变量来打开调试信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值