Laravel 8:调用 DB::unprepared($sql) 时出现 ErrorException::("PDO::exec(): MySQL server has gone away

Posted

技术标签:

【中文标题】Laravel 8:调用 DB::unprepared($sql) 时出现 ErrorException::("PDO::exec(): MySQL server has gone away")【英文标题】:Laravel 8: ErrorException::("PDO::exec(): MySQL server has gone away") when calling DB::unprepared($sql) 【发布时间】:2022-01-11 13:26:29 【问题描述】:

我运行一个 laravel 播种机:

public function run()
    
        $path = public_path('sql/cities.sql');
        $sql = file_get_contents($path);
        DB::unprepared($sql);    

插入的 sql 文件非常大,它存储在 public/sql 中,它与来自 github 的这个文件相同(仅带有插入语句):Cities SQL File

当我运行播种机时,它会抛出这个错误:

D:\codes\laravel\arkanlabs_b2b\vendor\laravel\framework\src\Illuminate\Database\Connection.php:541 ErrorException::("PDO::exec(): mysql server has away")

我在 *** 中尝试了许多解决方案,例如: 1- 在 my.ini 中将 max_allowed_pa​​cket 最大化为 200M(不起作用) 2- 在 php.ini 中将 max_execution_time 最大化为 300(不起作用)

我也搜索过,我有一个解决方案不确定它是否有效,因为我无法确定/应用它来最大化 mysql 的连接超时

感谢任何帮助!

【问题讨论】:

【参考方案1】:

我通过在 my.ini 中的 [mysqld] 下设置 max_allowed_pa​​cket=200MB 然后重新启动您的 mysql 来解决它。

我在 [mysqldump] 下设置了 max_allowed_pa​​cket,这是错误


MySQL 转储:仅用于导出 sql。 MySQL:是 MySQL 客户端(或 mysql 守护程序),用于运行查询(在我的情况下插入这个 16 MB 的大 sql 文件)

参考这个服务器故障问题:difference between mysql and mysqldump

【讨论】:

以上是关于Laravel 8:调用 DB::unprepared($sql) 时出现 ErrorException::("PDO::exec(): MySQL server has gone away的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8在null上调用成员函数扩展()

Laravel 8 API 调用未正确返回验证错误

Laravel 8 的问题:在 null 上调用成员函数 count()

从(Laravel 8)Blade 模板文件调用函数

调用字符串上的成员函数 addEagerConstraints() - Laravel 8

未捕获的错误:将 laravel 5.8 升级到 8 后调用未定义的函数 Illuminate\Mail\TransportManager()