设置一个空闲的队列来处理数据,因为我不时会收到有关mysql服务器的错误消息。有没有人有任何关于如何在Yii中优雅地解决这个问题的建议,当给出错误时,我可以重新启动数据库连接并继续。
不要过多关注mysql设置以增加wait_time,因为它可以帮助最小化问题但不能解决问题。
修改 这可能看起来很有趣/悲伤取决于你如何看待它...我在运行的查询中添加了@符号并且它们被try-catch捕获...如果错误代码是,我重置数据库连接在范围[2006]内,否则应用程序返回错误......希望这似乎是一个合理的答案......
答案 0 :(得分:3)
我搜索了很多关于这个问题,当你使用特别是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
)
),
答案 1 :(得分:1)
我通过添加
解决了max_allowed_packet = 128M
wait_timeout=3600
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
在mysql的my.cnf中