Yii2 MySQL服务器已经消失了

时间:2014-11-16 21:14:27

标签: php mysql pdo yii2

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

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

我在db配置中添加了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();

但它没有帮助。你有什么想法我做错了吗?

由于

3 个答案:

答案 0 :(得分:4)

我通过添加动作解决了

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

答案 1 :(得分:1)

我通过添加

解决了
max_allowed_packet = 128M
wait_timeout=3600
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

在mysql的my.cnf中

答案 2 :(得分:0)

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

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