调试代码的时候碰到了三个问题:
1. mysql_query()函数执行失败后,返回值为1,却打不出错误 iRet = mysql_query(l_pMyData, szSqlSentence); if (SK_SUCCESS != iRet)
{
MTGW_LOG_DBG("fail:SqlSentence:%s\n",szSqlSentence);
MTGW_LOG_DBG("error flag is %d: %s\n",iRet, mysql_error(l_pMyData));
retuan FAIL;
} 打印出来的是
fail:select * from history limit 0, 50
error flag is 1:
可我看了mysql的相关头文件,好像没有返回值是1的呀,貌似是从1000多开始的,到底是有错没错,语句是可以执行的;
有时候却打印出:
error flag is 1: Lost connection to MySQL server during query
2. mysql_store_result函数执行失败,返回NULL
printf("%x\n",l_pMyData);
iRet = mysql_query(l_pMyData, szSqlSentence);
printf("%x\n",l_pMyData); ......
printf("%x\n",l_pMyData);
res = mysql_store_result( l_pMyData ) ;
printf("%x\n",l_pMyData);
if (NULL == res)
{
printf("mysql_store_result fail\n");
}打印出:
0x003030a8
0x003030a8
0x003030a8
0x003030a8
mysql_store_result fail
句柄的指向并没有改变,怎么会执行失败呢3.第三个问题就更奇怪了,程序运行时上述函数都是执行成功的,但在单步调试时经常出现失败。
1. mysql_query()函数执行失败后,返回值为1,却打不出错误 iRet = mysql_query(l_pMyData, szSqlSentence); if (SK_SUCCESS != iRet)
{
MTGW_LOG_DBG("fail:SqlSentence:%s\n",szSqlSentence);
MTGW_LOG_DBG("error flag is %d: %s\n",iRet, mysql_error(l_pMyData));
retuan FAIL;
} 打印出来的是
fail:select * from history limit 0, 50
error flag is 1:
可我看了mysql的相关头文件,好像没有返回值是1的呀,貌似是从1000多开始的,到底是有错没错,语句是可以执行的;
有时候却打印出:
error flag is 1: Lost connection to MySQL server during query
2. mysql_store_result函数执行失败,返回NULL
printf("%x\n",l_pMyData);
iRet = mysql_query(l_pMyData, szSqlSentence);
printf("%x\n",l_pMyData); ......
printf("%x\n",l_pMyData);
res = mysql_store_result( l_pMyData ) ;
printf("%x\n",l_pMyData);
if (NULL == res)
{
printf("mysql_store_result fail\n");
}打印出:
0x003030a8
0x003030a8
0x003030a8
0x003030a8
mysql_store_result fail
句柄的指向并没有改变,怎么会执行失败呢3.第三个问题就更奇怪了,程序运行时上述函数都是执行成功的,但在单步调试时经常出现失败。
解决方案 »
- mysql集群(windows XP下) 问题
- 求教一条更新语句
- 什么mysql客户端工具可以显示某个操作对应的sql语句呢
- MYSQL 存储过程内用存储过程的参数作表名查找
- mysql中文模糊查询请教,解决立刻给分!
- 如何在Redhat--linux下安装使用MySQL?
- 如何实现这样的功能?
- mysql 有没有 getrows???
- 怎样获得ID号存在于a表中同时不存在于b表中的记录,唉,MYSQL,还是太弱
- 如何把mysql中某个字段中的多个不同数一次性替换为一个数
- ERROR 1146 (42S02): Table 'XXX.XXX' doesn't exist
- 求教MySQL存储过程错误异常的记录,和可以单步调试的客户端。
还有楼上说的最长允许等待时间指的哪一个,关于时间的有好几个?我的一些配置如下:
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set=gbk[mysqld]
port = 3306
default-character-set=gbk
log-error = "D:/errordate.err" #错误日志
log = "D:/logdate.err" #通用查询日志socket = /tmp/mysql.sock
skip-locking
key_buffer_size = 16K
max_allowed_packet = 32M #10
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 8K
thread_stack = 128K
tmp_table_size = 50
query_cache_size=32M #查询缓冲
thread_cache_size=8
net_read_timeout=120
net_write_timeout=120server-id = 1
skip-name-resolve [mysqldump]
quick
max_allowed_packet = 32M[mysql]
no-auto-rehash[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M[mysqlhotcopy]
interactive-timeout帮忙分析下吧,我在看了很多资料了,都没解决。我在线等待!!!!
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+----------------------------+-------+
10 rows in set (0.00 sec)mysql>
http://iihero.com
mysql> show variables like '%timeout%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| net_read_timeout | 120 |
| net_write_timeout | 120 |
| slave_net_timeout | 3600 |
| table_lock_wait_timeout | 50 |
| wait_timeout | 28800 |
+----------------------------+-------+
echo 'success';
}
else{echo mysql_error();}
out of memory (Needed 448 bytes)配置文件里 max_allowed_packet = 64M,这个值应该是足够的。还是老样子,运行时是成功的,在调试时出现问题。
当我把它停掉后再调试,之前的函数失败问题就没有出现了。可是我用的是两个独立的句柄,
不应该互相影响才对。定时器(5秒) mysql_query()
操作表 A ---> 数据库 <--- mysql_store_result()
mysql_fetch_row()
操作表 B
它们是基于多线程的
我了解你说的情况,有时候,如果长时间一个connection不活动,不执行任何CRUD操作,这个connection就会被server端给“废”掉,
解决办法就是在你得到connection之后,立即设置两个参数:
std::string timeout = "2592000";
sql = "set wait_timeout=" + timeout;
mysql_query(sql.c_str()); sql = "set interactive_timeout=" + timeout;
mysql_query(sql.c_str());
这里将timeout设成一个月,足够应付了。
这之后执行你要的查询,就不会有什么问题。还有一种解决方案,启用一个线程, 每隔一段时间,比如1分钟,针对每个连接,作一次简单的"select 1"操作。第一种方案最简单。