如何从Python中检测到MySQL服务器总死亡?

时间:2012-04-04 19:35:50

标签: python django mysql-python

我一直在对我们的数据库进行一些HA测试,在我的服务器死亡模拟中,我发现了一个问题。

我的测试使用Django并执行此操作:

  1. 连接数据库
  2. 查询
  3. 拔出服务器的网络线
  4. 做另一个查询
  5. 此时一切都在mysql_ping函数中无限期挂起。就我的应用程序而言,它连接到数据库(因为之前的查询),只是服务器需要很长时间才能响应......

    有谁知道处理这种情况的任何方法? connect_timeout不起作用,因为我已经连接。 read_timeout似乎是一个有点过于生硬的工具(无论如何我都无法使用Django)。

    设置默认套接字超时也不起作用(并且会过于生硬,因为这会影响所有套接字操作,而不仅仅是MySQL)。

    我正在认真考虑在线程中执行查询并使用Thread.join(timeout)来执行超时。

    理论上,如果我可以执行此超时,那么重新连接逻辑应该启动并且我们的数据库的自动故障转移应该完美地工作(在受影响的进程上杀死-9目前可以做到这一点,但有点手动!)。

1 个答案:

答案 0 :(得分:0)

我认为在面向前方的网络服务器上设置read_timeout会更加内联。可能存在任何原因无限期地阻止您的django应用程序。虽然您找到了一个特定的案例,但可能会有更多(代码错误,缓存困难等)。