【问题标题】:Yii mysql server gone awayYii mysql 服务器不见了
【发布时间】:2013-10-13 09:14:08
【问题描述】:

设置一个队列闲置以处理传入的数据,有时我会收到关于 mysql 服务器已消失的可怕错误。有没有人对如何在 Yii 中优雅地解决这个问题有任何建议,当出现错误时,我可以重新启动数据库连接并继续。

不要太在意mysql设置来增加wait_time,因为它可以帮助最小化问题但不能解决它。

编辑 这可能看起来很有趣/悲伤,具体取决于您如何看待它......我在我正在运行的查询中添加了@符号,它们被 try-catch 捕获......如果错误代码是,我重置数据库连接在范围 [2006] 内,否则应用程序返回错误......希望这看起来是一个合法的答案......

【问题讨论】:

  • these questions 有用吗?这可能只是一个 MySQL 问题,而不是 Yii 问题。
  • @halfer 我正在通过故意重启 mysql 服务器来强制 mysql 消失消息,以尝试在 yii 上设置一个拦截器以从 mysql 离开中恢复
  • 你在 mysql 中有什么样的数据,可能你需要在这些时间间隔中将数据放入缓存中
  • @sakhunzai 我有一个队列工作者,它会进行几次读取[仅在 redis 密钥过期时],然后它只是写入数据。
  • 空闲时间是一夜之间吗?

标签: php mysql yii


【解决方案1】:

我搜索了很多关于这个问题的信息,当你使用 Yii 命令时,这会发生在 Yii 中。如果 autoConnect 未设置为 false,我不知道 Yii 为什么要为每个 AR 创建一个新连接,这意味着要重用打开的连接。

    'db' => array(
         // Reuse a connections and not exceed the number of connections to got error 2006
        'autoConnect' => false,
         // If you are using a transactions and persistent connections
        'attributes' => array(
            PDO::ATTR_PERSISTENT => TRUE,
            PDO::ATTR_AUTOCOMMIT => FALSE
        )
    ),

【讨论】:

  • 很高兴听到这个消息。你在哪里找到它的解释?
  • 来自 yii 文档:yiiframework.com/doc/api/1.5/CDbConnection#autoConnect-detail“是否应该自动建立数据库连接,组件正在初始化。默认为 true。...”当我通过 AR 进行多个查询时,我已经看到了这一点在组件的 __construct 上填充数组结构。简而言之,当您初始化使用 AR 的新组件时,如果为 false,yii 不会与他创建新的连接。
  • 您必须承认服务器消失的原因有很多。这里的答案是减少时间间隔内资源数量的使用。但是,如果您的查询需要大量数据(例如,如果您有带有序列化数据或文章的文本列),则会发生此错误,因此在这种情况下您必须增加 (max_allowed_pa​​cket = 256M)。更多信息是链接:dev.mysql.com/doc/refman/5.0/en/gone-away.html
  • 也许你在所有重置连接之上还有其他问题:Yii::app()->db->setActive(FALSE); Yii::app()->db->setActive(TRUE);
  • Yii::app()->db->setActive(FALSE); Yii::app()->db->setActive(TRUE);这两条线很棒。为什么 Yii 没有一些用于切换连接的实用功能。谢谢它为我节省了很多。由于我对问题的模拟。这应该通过捕获异常并在上面执行 2 条魔术代码行来工作,然后就可以开始了。
【解决方案2】:

我通过添加解决了

max_allowed_packet = 128M
wait_timeout=3600
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

在mysql的my.cnf中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2010-09-14
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多