这个问题困扰2个月了,在C语言版块没解决,只好来这里看看有类似情况的兄弟不
由于我的程序时由lighttpd拉起来的,只要connect执行出错,程序必定崩溃.而不由lihgttpd启动的话,就没法跟我的程序通信了,那样的话,怎么搞connect也会成功.
我用过信号量来处理保证只一个进程connect数据,也同样出错,反复修改了2个月,方法用尽,依然没解决,求帮助...
下面是这部分代码MYSQL* m_insert_mysql = new MYSQL;
mysql_init(m_insert_mysql); //这里如果init失败,也是程序崩溃,所以下面这行NULL判断完全是多余的
if (m_insert_mysql==NULL) return;//就在下面这行,3个进程同时执行,总有1-2个进程会出错然后程序崩溃m_insert_mysql = mysql_real_connect(m_insert_mysql, "127.0.0.1", "mydb", "mydb^2010","mydb",3306, NULL, 0);
......//下面的代码
mysql_close(m_insert_mysql);
由于我的程序时由lighttpd拉起来的,只要connect执行出错,程序必定崩溃.而不由lihgttpd启动的话,就没法跟我的程序通信了,那样的话,怎么搞connect也会成功.
我用过信号量来处理保证只一个进程connect数据,也同样出错,反复修改了2个月,方法用尽,依然没解决,求帮助...
下面是这部分代码MYSQL* m_insert_mysql = new MYSQL;
mysql_init(m_insert_mysql); //这里如果init失败,也是程序崩溃,所以下面这行NULL判断完全是多余的
if (m_insert_mysql==NULL) return;//就在下面这行,3个进程同时执行,总有1-2个进程会出错然后程序崩溃m_insert_mysql = mysql_real_connect(m_insert_mysql, "127.0.0.1", "mydb", "mydb^2010","mydb",3306, NULL, 0);
......//下面的代码
mysql_close(m_insert_mysql);
MYSQL* m_insert_mysql = new MYSQL;
mysql_init(m_insert_mysql); //这里如果init失败,也是程序崩溃,所以下面这行NULL判断完全是多余的
if (m_insert_mysql==NULL) return;就在下面这行,3个进程同时执行,总有1-2个进程会出错然后程序崩溃
m_insert_mysql = mysql_real_connect(m_insert_mysql, "127.0.0.1", "mydb", "mydb^2010","mydb",3306, NULL, 0);
......//下面的代码
mysql_close(m_insert_mysql);
MYSQL错误日志我试试去看,太多信息了
101105 11:42:45 80 Connect lrcdb@localhost on lrcdb
80 Quit
81 Connect lrcdb@localhost on lrcdb
81 Quit//这里就第2个进程连接的时候就断了,只看到connect 没有Quit了
101105 11:44:45 82 Connect lrcdb@localhost on lrcdb
82 Quit
83 Connect lrcdb@localhost on lrcdb
//上面那个进程死了,所以马上lighttpd又拉起一个进程
101105 11:44:51 84 Connect lrcdb@localhost on
84 Init DB lrcdb
84 Query SET NAMES utf8
85 Connect lrcdb@localhost on
85 Init DB lrcdb
85 Query SET NAMES utf8
85 Query select id, title, artist, lrc from lrcdb order by id
101105 11:44:55 85 Quit
我的是ubuntu操作系统
但是这个目录里都没有找到err文件。
我再看了配置文件,我在找找!
我把代码写的最简单化了,出错后还是抓不到错误信息Global_wRunlog.writeFile("begin to mysql success!#########");m_insert_mysql= mysql_real_connect(m_insert_mysql, "127.0.0.1", "lrcdb", "lrcdb^2010","lrcdb",3306, NULL, 0);
mysql_close(m_insert_mysql);
//出错情况下,下面这句就输出不到文件了
Global_wRunlog.writeFile("connect to mysql success!.......");
我查MYSQL手册里面说mysql_real_connect,有线程安全问题,我的MYSQL确实不是线程安全的
我现在在试着用信号量,看看能不能让3个进程不在同一个时刻访问MYSQL!