我的Laravel 5.7网站遇到了一些我认为彼此相关的问题(但在不同时间发生):
PDO::prepare(): MySQL server has gone awayE_WARNING: Error while sending STMT_PREPARE packet. PID=10PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry (我的数据库似乎经常尝试在同一秒内写两次相同的记录.我一直无法弄清楚为什么或如何重现它;它似乎与用户行为无关.)几个月来,我一直看到这些可怕的日志消息,而且我完全无法重现这些错误(并且无法诊断和解决它们).
我还没有发现任何实际症状或听到用户的任何抱怨,但错误消息似乎并非易事,所以我真的想了解并解决根本原因.
我已经尝试更改我的MySQL配置使用max_allowed_packet=300M(而不是默认的4M)但在我有超过几个访问者访问我的网站的日子里仍然经常得到这些例外.
由于这个建议,我还设置了(从5M和10M改为)以下内容:
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size = 218M
Run Code Online (Sandbox Code Playgroud)
作为进一步背景:
artisan queue:work --sleep=3 --tries=3 --daemon)的队列工作者. mysqlslap查询(虽然我完全是新手)并且即使在模拟数百个并发客户端时也没有发现任何缓慢的问题.SHOW VARIABLES;和SHOW GLOBAL STATUS; 在这里.我my.cnf是:
[mysql]
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size …Run Code Online (Sandbox Code Playgroud) 我正在为Codeigniter中的PHP脚本运行Cron Job来转换上传的视频.一切都执行没有任何问题,但一旦它将数据插入数据库,我收到此错误:
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);
}
Run Code Online (Sandbox Code Playgroud)
这不起作用我仍然收到错误.如果我$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;
}
}
Run Code Online (Sandbox Code Playgroud)