这个问题困扰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);

解决方案 »

  1.   


    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);
      

  2.   

    程序崩溃,和MYSQL的关系在哪呢??看看MYSQL的错误日志,如果是非正常断开,里面会有提示信息的。
      

  3.   

    回楼上2位,我的程序是抓不到错误信息的。因为只要connect出错程序就崩溃了
    MYSQL错误日志我试试去看,太多信息了
      

  4.   

    //11:42:45 这里是正常的
    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
      

  5.   

    你到MYSQL的安装目录下的DATA文件夹下,打开.ERR文件看看。
      

  6.   

    没有DATA文件夹,也没找到.ERR文件啊.
    我的是ubuntu操作系统
      

  7.   

    不管你什么操作系统,DATA目录肯定是存在的。
      

  8.   

    ubuntu的mysql目录就是在/var/lib/mysql
    但是这个目录里都没有找到err文件。
    我再看了配置文件,我在找找!
      

  9.   

    郁闷,我输出了1.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!.......");
      

  10.   

    并不是要抓你程序打印的错误,而是MYSQL自己的错误日志。你的程序崩溃后MYSQL服务是否还正常??
      

  11.   

    MYSQL正常的。MYSQL自己的错误日志,没有打印信息.
    我查MYSQL手册里面说mysql_real_connect,有线程安全问题,我的MYSQL确实不是线程安全的
    我现在在试着用信号量,看看能不能让3个进程不在同一个时刻访问MYSQL!