[英]PHP Codeigniter 3 MySQL server has gone away
我正在 Codeigniter 中为 PHP 脚本运行 Cron 作业以转换上传的视频。 一切执行都没有任何问题,但是一旦将数据插入数据库,我就会收到此错误:
Error Number: 2006 MySQL server has gone away
该过程基本上转换视频,如果成功从视频创建缩略图和海报,然后将视频数据插入数据库。 我试过添加$this->db->reconnect();
在我的模型函数中。 这是函数:
function add_video($data)
{
//BECASUE THE CONVERSION TAKES SO LONG WE NEED TO RECONNECT TO THE DATABASE AFTER EACH EXEC
$this->db->reconnect();
$this->db->insert('video_uploads', $data);
}
这不起作用我仍然收到错误。 如果我添加$this->db->reconnect();
每次exec
我都会收到这些错误:
Message: mysql_ping() expects parameter 1 to be resource, boolean given
Message: mysql_real_escape_string() expects parameter 2 to be resource, boolean given
仅供参考,我正在使用 FFMPEG 来转换我的视频。
在所有执行完成后,如何保持连接处于活动状态,以便将数据插入数据库?
编辑:这是 Codeigniter 的$this->db->reconnect();
功能看起来像:
public function reconnect()
{
if (mysql_ping($this->conn_id) === FALSE)
{
$this->conn_id = FALSE;
}
}
为了避免这个错误,你可以写
$this->load->database();
在你打电话之前
$this->db->reconnect();
对我来说,这是我迁移服务器的数据库文件中的一个设置,并且没有完全设置 mysql。 在 mysql 中,我使用 ssl 连接到服务器。
一旦我注释掉以下一切都运行良好。
$db['default']['options'] = array(
PDO::MYSQL_ATTR_SSL_KEY => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-key.p$
PDO::MYSQL_ATTR_SSL_CERT => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/client-cert.$
PDO::MYSQL_ATTR_SSL_CA => $_SERVER['DOCUMENT_ROOT'].'/application/third_party/ca-cert.pem'
);
我首先禁用库和其他自动加载的文件,直到我推断出问题不是由模型或控制器引起的。 一旦我禁用了数据库库,我就没有收到 500 服务器错误或 mysql 错误。 检查我的连接设置后,我意识到是什么导致了问题。
由于不同的原因,我遇到了类似的问题 - 我正在用 > 12,000 次选择/更新来重击数据库。 mysql 服务器刚刚放弃并“去度假”
无论如何,只需要一点休息时间,在循环中我补充道:
if ($this->db->conn_id->ping() === FALSE)
{
sleep(1);
$this->db->reconnect();
}
在某些情况下$this->db->reconnect();
抛出错误。 我不确定为什么会出错。 当我知道它时,我会更新答案。 但是现在要解决这种问题,您实际上可以在下面执行:
代替:
$this->db->reconnect();
和:
$this->db->close();
$this->db->initialize();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.