【问题标题】:Yii2 MySQL server has gone awayYii2 MySQL 服务器已经消失
【发布时间】:2014-11-16 21:14:26
【问题描述】:

我正在开发 Yii2 应用程序。有一个控制台脚本执行了很长时间并且失败并出现错误:MySQL 服务器已消失

根据日志,它会在 6-7 秒后抛出异常,而不会与数据库通信(它会执行一些工作,如果需要,应该更新表)。

我在数据库配置中添加了 PDO 超时:

'attributes' => [
    PDO::ATTR_TIMEOUT => 600,
],

我还检查了 MySQL 超时变量,但它们似乎很好:

mysql> show variables like '%timeout%';
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| connect_timeout            | 10     |
| delayed_insert_timeout     | 300    |
| innodb_lock_wait_timeout   | 50     |
| innodb_rollback_on_timeout | OFF    |
| interactive_timeout        | 259200 |
| net_read_timeout           | 30     |
| net_write_timeout          | 60     |
| slave_net_timeout          | 3600   |
| table_lock_wait_timeout    | 50     |
| wait_timeout               | 259200 |
+----------------------------+--------+
10 rows in set (0.00 sec)

我尝试像这样在控制器中重新连接:

Yii::$app->db->close();
Yii::$app->db->open();

但这没有帮助。你知道我做错了什么吗?

谢谢

【问题讨论】:

    标签: php mysql pdo yii2


    【解决方案1】:

    我通过添加动作解决了

    Yii::$app->db->createCommand('SET SESSION wait_timeout = 28800;')->execute();
    

    【讨论】:

      【解决方案2】:

      我通过添加解决了

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

      在mysql的my.cnf中

      【讨论】:

        【解决方案3】:

        您需要使用try {...}catch(){...} 语句手动处理。

        try {
                \Yii::$app->db->createCommand("DO 1")->execute();
            } catch (Exception $e) {
                \Yii::$app->db->close();
                \Yii::$app->db->open();
            }
        

        【讨论】:

          猜你喜欢
          • 2011-06-07
          • 2010-12-20
          • 2015-01-15
          • 2016-03-06
          • 2017-04-02
          • 2011-11-09
          • 2014-02-12
          • 2015-04-05
          相关资源
          最近更新 更多