设为首页 加入收藏

TOP

Mysql网络断开重连问题
2015-07-24 10:30:51 来源: 作者: 【 】 浏览:1
Tags:Mysql 网络 断开 问题

最近做一个项目的后台守护程序,需要多线程对mysql数据库服务进行操作,为了加强守护撑的健壮性,特地连接成功后拔掉网线,然后测试守护程序断开重新连接的健壮性,可是发现网络断开后,重新插上网线,用mysql_real_conncet进行重新连接返回的永远是假,也就是重新连接失败,之后我想断开网络后重新将mysql连接释放(mysql_close(MYSQL )),并重新初始化mysql_init((MYSQL )),然后再用mysql_real_conncet()函数进行连接,但是这样做的后果是mysql_real_connect()报错,报错内容为没有足够的内存,明明我的电脑还有5个G空闲内存,居然说内存不够。。。
经过查阅资料,发现有一个叫mysql_options的函数,结合mysql_ping函数,mysql连接断开后可以自动重新连接:
使用mysql_ping来自动检查重连。用到两个函数,一个是mysql_ping,另外一个是mysql_options。具体使用方法是在mysql_real_connect之前,mysql_init之后,使用mysql_options。用法如下:

 char value = 1;
 (void) mysql_init (&mysql);
 mysql_options(&mysql, MYSQL_OPT_RECONNECT, (char *)&value);

结合百度百科的使用方法:
mysql_optins
mysql_ping
这里写图片描述
这里写图片描述
然后在以后mysql_query之前首先使用mysql_ping进行判断,如果连接已经断开,会自动重连,或者再查询失败后,执行mysql_ping函数,然后自动重新连接mysqlsever.
不过,请注意,自动重新连接也会导致一些副作用,如下:
* 任何活动的交易都被回滚,autocommit模式被置为reset。
* 所有表锁都释放
* 所有临时表是关闭(撤消)
* Session variables are reinitialized to the values of the corresponding variables.会话变量被重新初始化为相应的变量。 这也影响那些隐式声明的变量,SET NAMES。比如使用This also affects variables that are set implicitly by statements such as SET NAMES.这也影响了变量,是一套由含蓄的声明,例如订定的名称。
* 用户变量设置都将丢失。
* 编制报表释放。
* 句柄变量被关闭。
* LAST_INSERT_ID()被重置为0 。
* 使用GET_LOCK()获得的锁被释放

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇redis学习记录 下一篇sqlplus登录问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·TCP/UDP协议_百度百科 (2025-12-26 12:20:11)
·什么是TCP和UDP协议 (2025-12-26 12:20:09)
·TCP和UDP详解 (非常 (2025-12-26 12:20:06)
·Python 教程 - W3Sch (2025-12-26 12:00:51)
·Python基础教程,Pyt (2025-12-26 12:00:48)