mysql版本是 mysql-community-5.1.45
系统是centos 5.4
mysql做了主从

解决方案 »

  1.   

    在 sqlyog中,调用了一次call 我的存储过程(入参)然后,在mysql中执行show full processlist进行查看
    发现有两个连接在同时执行我的存储过程中的语句(别的是不可能出现那些sql语句的)而且经过执行后的结果来看,执行后的数据为正常数据的两倍。然后将存储过程中的sql语句进行逆运算(比如,加变成减),然后再执行,发现数据恢复为正常数据了。
      

  2.   

    那在 MYSQL命令行工具中试一下。 以断定是你的SQLYOG的问题还是你的存储过程写错了。
      

  3.   

    补充一下,刚开始查看是不会出现两个连接都同时执行我的存储过程中语句的情况的。只是中途突然出现一个连接在执行存储过程中的语句。一直不明白为什么,存储引擎用的是innodb
      

  4.   

    不知道,我才问的,呵呵,看看哪位大侠知道,什么语句或者什么情况会造成mysql存储过程另起一个连接去再执行一次存储过程。那个连接放心,是从同一个ip起来的,不是中间件,也不是任何人。所以比较纳闷。
      

  5.   

    贴你的存储过程的代码。你的代码中有什么语句调用了自己。这种可能总是存在的吧。
    另外你为什么不肯在 MYSQL命令行工具中试一下 看看有没有同样的问题?
      

  6.   


    查下日志,看执行2个执行存储过程的mysql的进程的ip地址,如果ip地址是一样的话,那么是你自己写的应用问题,如果ip地址不是一样的话,那就是别人也在跑了这个存储过程。
      

  7.   


    还有你的存储过程是用什么方式调用的,比如shell命令行里面,或者workbench前台工具里面等等?
      

  8.   

    呵呵,还真无法从ip地址看,因为我的数据库是内外网隔绝的,所有的连接都是通过ssh到一台外网服务器,然后再连接到数据库的。
      

  9.   

    通过严密的测试,终于证实存储过程执行两遍是sqlyog的问题。
    由于我并非直接连接数据库,而是通过ssh隧道对数据库服务器进行连接,即client --> ssh --> db
    由于存储过程执行时间过长,当ssh连接超时时,sqlyog会认为连接失败,从而重新连接,并再次发送存储过程调用语句。此次调试,通过在ssh的目标服务器上用tcpdump抓包分析,论证通过。
    在此感谢各位的热心解答,多谢。