【MySQL】mysqld got signal 11 案例一则

  今天遇到一个案例:监控报警 mysql 服务器突然crash,登陆数据库服务器发现mysqld_safe 进程存在,但是无法登陆数据库。

root@rac1 # my

Entry Port ==== 3306

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

root@masterdb1a.cms.xyi.aliyun.com # ps -ef | grep mysqld

root     15511 12134  0 14:06 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my330**f --skip-slave-start=1

mysql    19846 15511 69 14:10 pts/1    00:00:05 /usr/sbin/mysqld --defaults-file=/etc/my330**f --basedir=/ --datadir=/home/mysql/data3306/mysql --user=mysql --skip-slave-start=1 --log-error=/home/mysql/data3306/mysql/master-error.log --open-files-limit=8192 --pid-file=/home/mysql/data3306/mysql/rac1.pid --socket=/tmp/mysql3306.sock --port=3306

master-error.log中的报警日志如下,mysqld在不停的crash,restart,但是slave 重启之后,数据库立刻就crash。

130313 13:46:59 InnoDB Plugin 1.0.9 started; log sequence number 1854409642790

130313 13:46:59 [Note] Recovering after a crash using /home/mysql/data3306/mysql/mysql-bin

130313 13:46:59 [Note] Starting crash recovery...

130313 13:46:59 [Note] Crash recovery finished.

130313 13:46:59 [Note] Event Scheduler: Loaded 0 events

130313 13:46:59 [Note] /usr/sbin/mysqld: ready for connections.

Version: '5.1.48-aliyun-log'  socket: '/tmp/mysql3306.sock'  port: 3306  MySQL Community Server (GPL)

130313 13:46:59 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.003860' at position 498385473, relay log '/home/mysql/data3306/mysql/slave-relay.011248' position: 498385618

130313 13:46:59 [Note] Slave I/O thread: connected to master 'replicator@172.18.150.10:3306',replication started in log 'mysql-bin.003860' at position 521361565

130313 13:47:00 - mysqld got signal 11 ;

================================================

This could be because you hit a bug. It is also possible that this binary

or one of the libraries it was linked against is corrupt, improperly built,

or misconfigured. This error can also be caused by malfunctioning hardware.

We will try our best to scrape up some info that will hopefully help diagnose

the problem, but since we have already crashed, something is definitely wrong

and this may fail.

key_buffer_size=314572800

read_buffer_size=1048576

max_used_connections=1

max_threads=4000

threads_connected=0

It is possible that mysqld could use up to 

key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 8540418 K

bytes of memory

Hope that's ok; if not, decrease some variables in the equation.

==========================================================================

上述内容实际上可以忽略 计算公式的值也不过850M,而数据库服务器总共47g,不会不满足分配对应的内存。由于数据库一启动slave 进程就crash,所以检查相关的binlog 内容 mysql-bin.003860  position 498385473 开始的内容是什么的?

root@rac1 # mysqlbinlog  --no-defaults -v -v -v --start-position=498385473 mysql-bin.003860 > /home/admin/003860.sql

root@rac1 # 

root@rac1 # 

root@rac1 # 

root@rac1 # cd /home/admin/

root@rac1 # more 003860.sql 

# at 498385473

#130313 13:43:25 server id 1503306010  end_log_pos 498385553    Query   thread_id=81671382      exec_time=0     

....忽略一些注释信息

BEGIN

/*!*/;

# at 498385553

# at 498385657

# at 498385728

# at 498385794

# at 498386162

#130313 13:43:25 server id 1503306010  end_log_pos 498385657    Table_map: `c`.`node` mapped to number 0

#130313 13:43:25 server id 1503306010  end_log_pos 498385728    Table_map: `c`.`entry` mapped to number 0

#130313 13:43:25 server id 1503306010  end_log_pos 498385794    Table_map: `c`.`xxx_entry_rel` mapped to number 307680

#130313 13:43:25 server id 1503306010  end_log_pos 498386162    Update_rows: table id 0

#130313 13:43:25 server id 1503306010  end_log_pos 498386732    Update_rows: table id 0 flags: STMT_END_F

问题就出在红色的标记的位置,两个不同的表却被标记为 同一个0,sql thread 要用 number值来应用主库传过来的日志,重做sql,如果number值一样,就会出现张冠李戴的情况,sql应用报错。怀疑遇到bug。

thd: 0x2ab43a577000

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 = 0x582130c8 thread_stack 0x40000

/usr/sbin/mysqld(my_print_stacktrace+0x21)[0x89a177]

/usr/sbin/mysqld(handle_segfault+0x35c)[0x5c75c8]

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

/lib64/libc.so.6(memset+0xade)[0x313647b44e]

/usr/sbin/mysqld(_ZN12Field_string6unpackEPhPKhjb+0x99)[0x5985a9]

/usr/sbin/mysqld(_Z10unpack_rowPK14Relay_log_infoP8st_tablejPKhPK9st_bitmapPS5_Pmbb+0x158)[0x6a2350]

/usr/sbin/mysqld(_ZN14Rows_log_event8find_rowEPK14Relay_log_info+0x39c)[0x68ef6c]

/usr/sbin/mysqld(_ZN21Update_rows_log_event11do_exec_rowEPK14Relay_log_info+0x13)[0x697267]

/usr/sbin/mysqld(_ZN14Rows_log_event14do_apply_eventEPK14Relay_log_info+0x7a4)[0x69592e]

/usr/sbin/mysqld(_Z26apply_event_and_update_posP9Log_eventP3THDP14Relay_log_info+0xfd)[0x709b2d]

/usr/sbin/mysqld(handle_slave_sql+0x96a)[0x70f09a]

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

/lib64/libc.so.6(clone+0x6d)[0x31364d3c2d]

Trying to get some variables.

Some pointers may be invalid and cause the dump to abort...

上面的信息是说一些update相关的事情(有待进一步确认具体意义),解析的binlog中事务都是在对entry表多update操作,且字段@7明显有问题 多达数千字节。和前端开发确定@7字段应该有限制。

### UPDATE c.entry

### WHERE

###   @1=24715 /* INT meta=0 nullable=1 is_null=0 */

###   @2=NULL /* INT meta=0 nullable=1 is_null=1 */

###   @3=838939137 /* INT meta=0 nullable=1 is_null=0 */

###   @4=1497432085 /* INT meta=0 nullable=1 is_null=0 */

###   @5=808530481 /* INT meta=0 nullable=1 is_null=0 */

###   @6=842086449 /* INT meta=0 nullable=1 is_null=0 */

###   @7=NULL /* INT meta=765 nullable=1 is_null=1 */

...

### SET

###   @1=-1593835520 (2701131776) /* INT meta=0 nullable=1 is_null=0 */

###   @2=72062304000948757 /* LONGINT meta=0 nullable=1 is_null=0 */

###   @3=3277057 /* INT meta=0 nullable=1 is_null=0 */

###   @4=30000 /* INT meta=0 nullable=1 is_null=0 */

###   @5=-903638655 (3391328641) /* INT meta=0 nullable=1 is_null=0 */

###   @6=4684 /* INT meta=0 nullable=1 is_null=0 */

###   @7='\x00\x00a\x1912\x00\x00\x1100:16:3e:0e:13:77 ........省略N多 ....'

最终的解决方法是跳过出问题的binlog位置,重新启动slave 进程。问题解决!

接下来

1 同步 entry表,使之和主库一致。 

2 要求开发限制@7 字段的长度而非无限制。

时间: 2024-08-04 11:08:21

【MySQL】mysqld got signal 11 案例一则的相关文章

MySQL案例-mysqld got signal 11(补充)

-------------------------------------------------------------------------------------------------正文--------------------------------------------------------------------------------------------------------------- 背景:MySQL-5.7.12, debian 8核16G虚拟机, 业务方反馈

ndk jni c++ android-Android上利用JNI调用OpenCV函数时出现Fatal signal 11错误

问题描述 Android上利用JNI调用OpenCV函数时出现Fatal signal 11错误 我想在Android上用OpenCV实现人脸识别功能,即事先有一个我提供的人脸训练库,然后检测出人脸后,识别他和训练库中的哪类人最像. 我已在windows平台实现了该功能,并将训练好的FaceRecognizer通过save的方式存储成了xml.我将xml文件放入了Android手机某目录下,然后想利用JNI的方式在Android app中使用OpenCV载入该数据库,但运行到这一行就会报错: F

内存-android开发,遇到了Fatal signal 11 (SIGSEGV)

问题描述 android开发,遇到了Fatal signal 11 (SIGSEGV) 具体报错是 Fatal signal 11 (SIGSEGV) at 0x000000000 (code=1), thread 5761 public class MainActivity extends Activity implements OnGestureListener { ViewFlipper flipper; GestureDetector detector; Animation[] anim

fatal signal-Android vitamio出现Fatal signal 11异常

问题描述 Android vitamio出现Fatal signal 11异常 Fatal signal 11 (SIGSEGV) at 0xb77ea280 (code=1), thread 1243 (ov.vitamio.demo) 官网是这样解释的:https://www.vitamio.org/docs/Basic/2013/0505/4.html 下面是我的代码: /** * * @descreption:播放视频 * @param playUrl */ private void p

so-android jni使用,报错:Fatal signal 11 (SIGSEGV) code 2

问题描述 android jni使用,报错:Fatal signal 11 (SIGSEGV) code 2 代码如下: java代码: 打印语句: GeneratorCode generatorCode = new GeneratorCode(); ret = generatorCode.createpaycode("20150406164710" "12345655", ""); Log.d("tag", "re

Oracle使用触发器和mysql中使用触发器的案例比较_oracle

一.触发器 1.触发器在数据库里以独立的对象存储, 2.触发器不需要调用,它由一个事件来触发运行 3.触发器不能接收参数 --触发器的应用 举个例子:校内网.开心网.facebook,当你发一个日志,自动通知好友,其实就是在增加日志的时候做一个出发,再向表中写入条目. --触发器的效率很高 举例:论坛的发帖,每插入一个帖子都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,这时使用触发器效率会很高. 二.Oracle 使用 PL/SQL 编写触发器 1.--PL/SQL创建触发器的一般语法

jni-JNI Fatal signal 11

问题描述 JNI Fatal signal 11 Fatal signal 11 (SIGSEGV) at 0x75462000 (code=1), thread 5686 内存错误发生后如何排查,尤其是 Fatal signal 11 (SIGSEGV)这个错误尤其恼人,报出来之后程序就会崩溃,定位还不好定位,如何定位到所出问题的函数或者代码行? 解决方案 已解决,http://blog.csdn.net/u010477502/article/details/50626135 解决方案二: 觉

MySql分区表性能测试及切换案例

背景 互联网公司的业务变化很快,数据库表结构设计相对比较直接,很少会在前期设计的很完善.当业务存活并发展起来后,就需要在扩展性.安全性等方面进行改进. 比如,我们一张记录用户状态的表,存储在RDS for MySql(InnoDB存储引擎)中.此业务表最近膨胀到1.5亿条记录,存储占用30多G,且数据还在不断增长. 虽然目前整体性能表现尚可,但部分操作耗时越来越长,锁表冲突事件也开始出现.考虑到数据量的快速增长,以及数据库本身的雪崩特点,我们认为这张表存在很大的性能风险,急需优化. 性能分析 下

MySQL下的RAND()优化案例分析_Mysql

众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行.事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时. 首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表: [yejr@imysql]> show create table t_innodb_random\G *************************** 1. row *************************