mysql_real_query()段错误(Segmentation fault)

博客内容提到了在使用mysql_real_query()时遇到段错误,经过排查确定问题源于多个线程共享同一个数据库连接,在高并发下可能出现重连导致的线程安全问题。解决方案包括:1. 不重连,但可能导致所有线程无法使用;2. 减少并发量;3. 引入线程池来根本解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近服务器出问题,老是挂掉,linux系统上的一个socket服务器,mysql的数据库。下面是gdb的结果</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="python">the resultlen is52.........2016 7 5 15 31 48..........
the command number is : 0 
a9e961c2688b3eabread database the select * from comsocket where wifi_id='1afe34f76445'and com_id='a9e961c2688b3eab'
fetch data
insert 18446744073709551615 rows
update error

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffeffff700 (LWP 5005)]
0x00007ffff766f908 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) backtrace
#0  0x00007ffff766f908 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff78ce6a9 in ?? () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
#2  0x00007ffff78cf228 in my_net_read () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
#3  0x00007ffff78c87fa in cli_safe_read () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
#4  0x00007ffff78c9928 in ?? () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
#5  0x00007ffff78ca78c in mysql_real_query () from /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18
#6  0x000000000040706c in query_socket_outside (conn_ptr=0x60f4f0, socket_id=0x7fffefffee10 "\032\376\064\367dE", 
    com_id=0x7fffefffee00 "\251\351a\302h\213>\253\377\201@") at nat_server_mysql.c:322
#7  0x00000000004029ce in outside_send_to_socket (connection=0x60f4f0, addr_tel=0x62b575, sockfd=7, buf=0x62b589 "m\251\351a\302h\213>\253", send_len=37)
    at wifi_socket_server.c:505
#8  0x0000000000402150 in parse_task (task_node=0x62b56d) at wifi_socket_server.c:276
#9  0x0000000000407f38 in thread_function (arg=0x62c270) at nat_server_thread.c:429
#10 0x00007ffff767de9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#11 0x00007ffff73aa3fd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#12 0x0000000000000000 in ?? ()



查看了一下,确定是mysql_real_query()引起的段错误。但是为什么会出现呢?

百度,谷歌搜索了一下,说法大体是初始化一类的,或者写的不规范。但是我本身的代码是没问题的,各种检查错误也都有。

后来将这段代码注释掉,发现依然有错误,不过是换成了其他地方的这个函数,看来是访问数据库的问题。

然后是将类似的函数都注释掉,发现没有问题了。

可以断定,是并发上出问题了,我的程序只有一个connection,所有线程共用,当业务量特别大的时候就会导致并发的问题,但是并发问题并不会导致段错误。

然后观察了很久,发现出错的地方大多是有重连的迹象,于是想到重连会到时候Connection变化,其他正在使用的线程中途会访问越界,导致段错误。

解决办法:

1.不重连。即线程做数据库操作的时候,如果失败就直接返回。但是有副作用,如果connection确实是出问题了,所有的线程都没法使用了。

2.消除掉并发量大的操作,尽量避免同时大批量访问数据库

3.引入线程池。这是根本的解决办法。

mysql_query错误“Segmentation fault (core dumped)”通常是由于操作系统或者硬件问题引起的。这个错误表示在执行mysql_query时出现了一个段错误,导致程序崩溃并生成了一个核心转储文件。 可能的原因和解决方法如下: 1. 系统或硬件问题:这种错误可能是由于操作系统或硬件问题引起的。可以尝试重新启动系统或者检查硬件是否正常工作。 2. MySQL版本不兼容:这个错误可能是由于使用了不兼容的MySQL版本引起的。检查MySQL的版本是否与当前环境兼容,并尝试使用更稳定的版本。 3. 程序bug:这个错误可能由于程序中存在一些错误或者不恰当的代码导致。检查程序的代码,确保没有错误和逻辑问题,并修复任何发现的bug。 4. 编译器错误:这个错误可能是由于编译器本身的错误导致的。如果出现这种情况,可以尝试更新或切换到其他版本的编译器。 5. MySQL服务器连接问题:另外一个可能的原因是MySQL服务器的连接问题。如果出现“Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)”这个错误,表示无法通过指定的socket连接到MySQL服务器。可以尝试检查MySQL服务器的配置和运行状态,确保服务器正常运行并且socket文件正确配置。 总结来说,mysql_query错误“Segmentation fault (core dumped)”可能由于系统或硬件问题、MySQL版本不兼容、程序bug、编译器错误或者MySQL服务器连接问题引起。在解决这个问题时,可以尝试重新启动系统、检查硬件、更新MySQL版本、修复程序代码、更新或切换编译器、检查MySQL服务器配置和运行状态等方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL8.0.12源码编译安装_centos7.3](https://blog.youkuaiyun.com/weixin_39901685/article/details/113331434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [php编译报错大全](https://blog.youkuaiyun.com/weixin_33901641/article/details/92248393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值