我们公司目前有一台php web服务器,3台mysql服务器,目前经常有一些用户查询需要检索大量数据 导致mysql表锁死,所以造成整个系统都瘫痪了。现在想在用户过来之后php检查一下那台mysql服务器是正常,没有锁表的然后将请求分配到这个mysql上。想问大神们php通过什么方式可用知道mysql服务器是否有锁表

解决方案 »

  1.   

    MySQL 目前尚不支持分布式应用,从你的描述上看,也不是分布式应用
    那么你可以设置3个连接串,在使用中循环连接,限定时间没有连接上(表示该服务器忙)则对下一台服务器进行连接
    还可以使用事务,在满足回滚的情况下换一台服务器
      

  2.   

    我们现在是mysql都能连接上,而且所有sql语句都发送到了mysql,在mysql那使用show processlist时有一堆的“ Waiting for table level lock” 然后php就一直在等待mysql的数据返回结果,直到超时。
      

  3.   

    1、查询需要检索大量数据
    你应该做个搜索引擎了,或者优化一下你的sql语句
    2、3台mysql服务器
    像版主说的,循环访问三台mysql服务器(假设三台性能一样),做好失败后的二次链接就可以了
      

  4.   

    Waiting for table level lock 不就可以视为换服务器的条件吗?
    再说,你们做什么事情需要锁表呢?有那么多长时间的 update 吗?你只说 需要检索大量数据,这并不需要锁表呀
      

  5.   

     mysql 数据库的话 可以重新改造一下 
    可以使用 mysql-proxy 等中间件来做一个处理,据说 360 在这个上搞了个 Atlas, 你可以尝试看看。
    当然我更偏向于换数据库 比如 mongodb?  哈哈太多了 数据迁移也是件头痛的事